diff options
| author | Adrian Kummerlaender | 2015-01-17 22:45:31 +0100 | 
|---|---|---|
| committer | Adrian Kummerlaender | 2015-01-17 22:45:31 +0100 | 
| commit | 28dd281dd3e7c16185ecdb06b2a83f15bb074717 (patch) | |
| tree | 30f1e6d34081434bba530dd2aaac1f72448e5c89 /src/list | |
| parent | ec52d63d3caca690e822e1a07ba9c2f47710b4d5 (diff) | |
| download | TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar.gz TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar.bz2 TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar.lz TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar.xz TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.tar.zst TypeAsValue-28dd281dd3e7c16185ecdb06b2a83f15bb074717.zip  | |
Implemented `Take` function
* as its name implies this function _takes_ a maximum of _Count_ elements of a list
* added appropriate test case
Diffstat (limited to 'src/list')
| -rw-r--r-- | src/list/operation/basic.h | 35 | 
1 files changed, 34 insertions, 1 deletions
diff --git a/src/list/operation/basic.h b/src/list/operation/basic.h index cee4cbc..dbd080e 100644 --- a/src/list/operation/basic.h +++ b/src/list/operation/basic.h @@ -2,6 +2,7 @@  #define TYPEASVALUE_SRC_LIST_OPERATION_BASIC_H_  #include "operation/math.h" +#include "conditional/if.h"  namespace tav { @@ -26,7 +27,10 @@ struct Nth {  	typedef If<  		equal_value<Index, Size<0>>::value,  		Head<Cons>, -		typename Nth<Substract<Index, Size<1>>, Tail<Cons>>::type +		typename Nth< +			Substract<Index, Size<1>>, +			Tail<Cons> +		>::type  	> type;  }; @@ -35,6 +39,35 @@ struct Nth<Index, void> {  	typedef void type;  }; +template < +	typename Count, +	typename Current +> +struct Take { +	typedef Cons< +		Head<Current>, +		typename Take< +			Substract<Count, Size<1>>, +			Tail<Current> +		>::type +	> type; +}; + +template <typename Current> +struct Take<Size<0>, Current> { +	typedef void type; +}; + +template <typename Count> +struct Take<Count, void> { +	typedef void type; +}; + +template <> +struct Take<Size<0>, void> { +	typedef void type; +}; +  }  #endif  // TYPEASVALUE_SRC_LIST_OPERATION_BASIC_H_  | 
