diff options
Diffstat (limited to 'src/list')
| -rw-r--r-- | src/list/operation/basic.h | 4 | ||||
| -rw-r--r-- | src/list/operation/higher/misc.h | 32 | 
2 files changed, 30 insertions, 6 deletions
diff --git a/src/list/operation/basic.h b/src/list/operation/basic.h index 364a542..d80b347 100644 --- a/src/list/operation/basic.h +++ b/src/list/operation/basic.h @@ -13,12 +13,12 @@ class Length {  			typename,  			typename Previous  		> -		struct Count { +		struct count {  			typedef Add<Size<1>, Previous> type;  		};  	public: -		typedef typename Fold<Count, Size<0>, Cons>::type type; +		typedef typename Fold<count, Size<0>, Cons>::type type;  }; diff --git a/src/list/operation/higher/misc.h b/src/list/operation/higher/misc.h index 280c0d5..95a5f50 100644 --- a/src/list/operation/higher/misc.h +++ b/src/list/operation/higher/misc.h @@ -3,6 +3,7 @@  #include "fold.h"  #include "list/operation/concatenate.h" +#include "conditional/if.h"  namespace tav { @@ -16,12 +17,35 @@ class Map {  			typename Current,  			typename Previous  		> -		struct FunctionWrapper { +		struct function_wrapper {  			typedef Cons<Function<Current>, Previous> type;  		};  	public: -		typedef typename Fold<FunctionWrapper, void, List>::type type; +		typedef typename Fold<function_wrapper, void, List>::type type; + +}; + +template < +	template<typename> class Function, +	typename                 List +> +class Filter { +	private: +		template < +			typename Current, +			typename Previous +		> +		struct function_wrapper { +			typedef If< +				Function<Current>::type::value, +				Cons<Current, Previous>, +				Previous +			> type; +		}; + +	public: +		typedef typename Fold<function_wrapper, void, List>::type type;  }; @@ -32,7 +56,7 @@ class Reverse {  			typename Current,  			typename Previous  		> -		struct ReversedConcatenate { +		struct reversed_concatenate {  			typedef typename Concatenate<  				Previous,  				Cons<Current, void> @@ -40,7 +64,7 @@ class Reverse {  		};  	public: -		typedef typename Fold<ReversedConcatenate, void, List>::type type; +		typedef typename Fold<reversed_concatenate, void, List>::type type;  };  | 
