diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/list/operation/delete_nth.h | 21 | ||||
-rw-r--r-- | src/list/operation/higher/sort.h | 8 |
2 files changed, 23 insertions, 6 deletions
diff --git a/src/list/operation/delete_nth.h b/src/list/operation/delete_nth.h new file mode 100644 index 0000000..03df12a --- /dev/null +++ b/src/list/operation/delete_nth.h @@ -0,0 +1,21 @@ +#ifndef TYPEASVALUE_SRC_LIST_OPERATION_DELETE_NTH_H_ +#define TYPEASVALUE_SRC_LIST_OPERATION_DELETE_NTH_H_ + +#include "list/operation/append.h" +#include "list/operation/take.h" +#include "list/operation/drop.h" + +namespace tav { + +template < + typename Index, + typename List +> +using DeleteNth = Append< + typename Take<Index, List>::type, + typename Drop<Add<Index, Size<1>>, List>::type +>; + +} + +#endif // TYPEASVALUE_SRC_LIST_OPERATION_DELETE_NTH_H_ diff --git a/src/list/operation/higher/sort.h b/src/list/operation/higher/sort.h index a707a15..f9146d6 100644 --- a/src/list/operation/higher/sort.h +++ b/src/list/operation/higher/sort.h @@ -2,6 +2,7 @@ #define TYPEASVALUE_SRC_LIST_OPERATION_HIGHER_SORT_H_ #include "list/operation/concatenate.h" +#include "list/operation/delete_nth.h" #include "list/operation/higher/partition.h" #include "function/apply.h" @@ -16,14 +17,9 @@ class Sort { using index = Divide<typename Length<Sequence>::type, Size<2>>; using pivot = typename Nth<index, Sequence>::type; - using sequence_sans_pivot = typename Append< - typename Take<index, Sequence>::type, - typename Drop<Add<index, Size<1>>, Sequence>::type - >::type; - using partitions = typename Partition< Apply<Comparator, pivot, tav::_0>::template single_type, - sequence_sans_pivot + typename DeleteNth<index, Sequence>::type >::type; using lhs = typename Car<partitions>::type; |