From de1f1dc67a1dabcddac2e89a5d703e98a92b7f11 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Fri, 20 Feb 2015 22:03:19 +0100 Subject: Added `ReplaceNth` list operation * as its name implies this function replaces the _nth_ element of a given list * added appropriate test case --- src/list/operation/delete.h | 4 ++-- src/list/operation/delete_nth.h | 6 +++--- src/list/operation/replace_nth.h | 23 +++++++++++++++++++++++ test.cc | 15 +++++++++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 src/list/operation/replace_nth.h diff --git a/src/list/operation/delete.h b/src/list/operation/delete.h index 48f1137..5ac620a 100644 --- a/src/list/operation/delete.h +++ b/src/list/operation/delete.h @@ -9,11 +9,11 @@ namespace tav { template < typename Element, - typename List + typename Sequence > using Delete = Remove< Apply::template function, - List + Sequence >; } diff --git a/src/list/operation/delete_nth.h b/src/list/operation/delete_nth.h index 18e52bf..a834150 100644 --- a/src/list/operation/delete_nth.h +++ b/src/list/operation/delete_nth.h @@ -9,11 +9,11 @@ namespace tav { template < typename Index, - typename List + typename Sequence > using DeleteNth = Append< - Take, - Drop>, List> + Take, + Drop>, Sequence> >; } diff --git a/src/list/operation/replace_nth.h b/src/list/operation/replace_nth.h new file mode 100644 index 0000000..519a040 --- /dev/null +++ b/src/list/operation/replace_nth.h @@ -0,0 +1,23 @@ +#ifndef TYPEASVALUE_SRC_LIST_OPERATION_REPLACE_NTH_H_ +#define TYPEASVALUE_SRC_LIST_OPERATION_REPLACE_NTH_H_ + +#include "list/operation/concatenate.h" +#include "list/operation/take.h" +#include "list/operation/drop.h" + +namespace tav { + +template < + typename Index, + typename Value, + typename Sequence +> +using ReplaceNth = Concatenate, + List, + Drop>, Sequence> +>>; + +} + +#endif // TYPEASVALUE_SRC_LIST_OPERATION_REPLACE_NTH_H_ diff --git a/test.cc b/test.cc index 7a2e963..774f9be 100644 --- a/test.cc +++ b/test.cc @@ -22,6 +22,7 @@ #include "list/generator/higher/list_tabulate.h" #include "list/operation/delete.h" #include "list/operation/delete_nth.h" +#include "list/operation/replace_nth.h" #include "function/apply.h" @@ -666,6 +667,20 @@ static_assert( "(delete-nth 1 (list 1 2 3)) != (list 1 3)" ); +// list replace nth + +static_assert( + std::is_same< + tav::List, tav::Int<42>, tav::Int<3>>, + tav::ReplaceNth< + tav::Size<1>, + tav::Int<42>, + tav::List, tav::Int<2>, tav::Int<3>> + > + >::value, + "(replace-nth 1 42 (list 1 2 3)) != (list 1 42 3)" +); + // list partition static_assert( -- cgit v1.2.3