diff options
Reimplemented `TakeWhile` and `DropWhile` in terms of `ListIndex`
* new higher order list operation `ListIndex` returns the index of the first list element satisfying a given predicate function
** this enables finding the split index required for both `TakeWhile` and `DropWhile`
** actual list manipulation is then performed using lower order `Take` or `Drop`
** analogously to `list-index` in SRFI-1
** added appropriate test case
* added higher order predicate utility function `utility::predicate_assurance`
** as its name implies this function enables assuring that a value satisfies a given predicate
*** if this is not the case a surrogate value is returned instead
** this is used to return a appropriate size value if the `ListIndex` call fails because no element satisfies its predicate
** `detail::predicate_negator` was moved from `Remove`'s implementation details into the newly introduced `utility` namespace
*** as it is required by both `TakeWhile` and `DropWhile` in addition to `Remove`
* continuation of 8e49cc6
Diffstat (limited to 'src/list/operation/higher/remove.h')
-rw-r--r-- | src/list/operation/higher/remove.h | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/src/list/operation/higher/remove.h b/src/list/operation/higher/remove.h index 598f5a6..6770359 100644 --- a/src/list/operation/higher/remove.h +++ b/src/list/operation/higher/remove.h @@ -2,25 +2,16 @@ #define TYPEASVALUE_SRC_LIST_OPERATION_HIGHER_REMOVE_H_ #include "filter.h" +#include "utility/predicate.h" namespace tav { -namespace detail { - -template <template<typename> class Predicate> -struct predicate_negator { - template <typename Element> - using function = Not<Predicate<Element>>; -}; - -} - template < template<typename> class Predicate, typename List > using Remove = Filter< - detail::predicate_negator<Predicate>::template function, + utility::predicate_negator<Predicate>::template function, List >; |