BaseSort Manual
maxon::BaseSort is a class template that allows to sort data in arrays and to search in sorted arrays. For a default implementation handling simple data types see maxon::SimpleSort .
A new sorting class is created by implementing a custom class based on maxon::BaseSort . This custom class may implement:
LessThan
(): For sorting elements in an array.
IsEqual
(): For finding elements in an array.
Further flags that can be set are:
memcpy
,
memmove
or
realloc
.
memcpy
and moved using
memmove
.
An instance of the custom sorting class can be used to sort the elements stored in a maxon::BaseArray .
// custom BaseSort based class to sort integer values class IntegerSort : public maxon::BaseSort <IntegerSort, maxon::BASESORTFLAGS::MOVEANDCOPYOBJECTS> { public : static inline Bool LessThan ( maxon::Int a, maxon::Int b) { return a < b; } };
// prepare array maxon::BaseArray<maxon::Int> numbers; numbers. Resize (count) iferr_return ;
// custom function to fill the array with random values FillWithRandomNumbers(numbers);
// sort the elements stored in the array IntegerSort sort; sort.Sort(numbers);
// check result for ( const maxon::Int & number : numbers) DiagnosticOutput ( "Number: @" , number);
To find elements in the given array, the array must be sorted. The custom sorting class must implement both
LessThan
() and
IsEqual
().
// custom BaseSort based class to sort CustomDate data. // it also allows to compare maxon::Int with CustomDate. class DateSort : public maxon::BaseSort <DateSort> { public : // compare CustomDate with CustomDate
// compare maxon::Int with CustomDate static inline Bool LessThan ( maxon::Int key, CustomDate element) { return key < element.year; } static inline Bool IsEqual ( maxon::Int key, CustomDate element) { return key == element.year; } };
// create data maxon::BaseArray<CustomDate> dates; dates. Resize (count) iferr_return ;
// custom function to fill the array with random dates FillWithRandomDates(dates);
// sort array DateSort sort; sort.Sort(dates);
// search in the array const CustomDate* const date = sort.Find(2000, dates); if (date) DiagnosticOutput ( "@:@:@" , date->year, date->month, date->day); const maxon::Int index = sort.FindIndex(2000, dates. Begin (), dates. GetCount ()); if (index > 0) DiagnosticOutput ( "Index: @" , index);
// new element CustomDate newDate; newDate.year = 1970; newDate.month = 1; newDate.day = 1;
// insert new element maxon::Int insertionIndex; sort.FindInsertionIndex(newDate, dates, insertionIndex); dates. Insert (insertionIndex, newDate) iferr_return ;