From f1268ca3bf10ab136bafbd63894ce12353fa8690 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Tue, 10 Feb 2015 18:40:05 +0100 Subject: Moved `Sort` list index deletion into `DeleteNth` function * as it is commonly required functionality and as such should be provided by this library --- src/list/operation/delete_nth.h | 21 +++++++++++++++++++++ src/list/operation/higher/sort.h | 8 ++------ test.cc | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 src/list/operation/delete_nth.h 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::type, + typename Drop>, 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::type, Size<2>>; using pivot = typename Nth::type; - using sequence_sans_pivot = typename Append< - typename Take::type, - typename Drop>, Sequence>::type - >::type; - using partitions = typename Partition< Apply::template single_type, - sequence_sans_pivot + typename DeleteNth::type >::type; using lhs = typename Car::type; diff --git a/test.cc b/test.cc index 8a5c499..931d8f1 100644 --- a/test.cc +++ b/test.cc @@ -19,6 +19,7 @@ #include "list/generator/make_list.h" #include "list/generator/higher/list_tabulate.h" #include "list/operation/delete.h" +#include "list/operation/delete_nth.h" #include "function/apply.h" @@ -595,6 +596,19 @@ static_assert( "(delete 4 (list 1 2 3)) != (list 1 2 3)" ); +// list delete nth + +static_assert( + std::is_same< + tav::List, tav::Int<3>>::type, + tav::DeleteNth< + tav::Size<1>, + tav::List, tav::Int<2>, tav::Int<3>>::type + >::type + >::value, + "(delete-nth 1 (list 1 2 3)) != (list 1 3)" +); + // list partition static_assert( -- cgit v1.2.3