From 81d0e133c8f2d03b943ac82b7aae28ff3a3c5158 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Wed, 1 Jul 2009 00:43:19 +0200 Subject: [PATCH] new additions in this area now reasonable covered (closes #142) --- src/lib/meta/typelist-util.hpp | 22 ++++++----- tests/40components.tests | 51 +++++++++++++++++++++++++- tests/lib/meta/typelist-manip-test.cpp | 5 +-- tests/lib/meta/typeseq-manip-test.cpp | 12 +++++- 4 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/lib/meta/typelist-util.hpp b/src/lib/meta/typelist-util.hpp index 7e6c02a42..a55ca639f 100644 --- a/src/lib/meta/typelist-util.hpp +++ b/src/lib/meta/typelist-util.hpp @@ -172,11 +172,11 @@ namespace typelist{ template struct Splice,Node,0> { typedef Node::List> List; - typedef NullType Front; + typedef NullType Front; typedef typename Splice::Back Back; }; template - struct Splice, NullType, 0> { typedef Node List; + struct Splice, NullType, 0> { typedef Node List; typedef NullType Front; typedef Node Back; }; @@ -188,19 +188,23 @@ namespace typelist{ + /** + * Allows to access various parts of a given typelist: + * Start and End, Prefix and Tail.. + */ template struct Dissect; template struct Dissect > { - typedef Node List; - typedef T Head; - typedef Node First; - typedef TYPES Tail; - typedef typename SplitLast::List Prefix; - typedef typename SplitLast::Type End; - typedef Node Last; + typedef Node List; ///< the complete list + typedef T Head; ///< first element + typedef Node First; ///< a list containing the first element + typedef TYPES Tail; ///< remainder of the list starting with the second elm. + typedef typename SplitLast::List Prefix;///< all of the list, up to but extcluding the last element + typedef typename SplitLast::Type End; ///< the last element + typedef Node Last; ///< a list containing the last element }; template<> diff --git a/tests/40components.tests b/tests/40components.tests index 74592e8ab..f333d87ae 100644 --- a/tests/40components.tests +++ b/tests/40components.tests @@ -488,10 +488,11 @@ return: 0 END -TEST "TypeListManipl_test" TypeListManipl_test <-<2>-<3>- out: List2 :-<5>-<6>-<7>- out: Added2 :-<3>-<4>-<5>- +out: FilterEven :-<2>-<6>- out: Append1 :- out: Append2 :-<11>-<22>- out: Append3 :-<111>- @@ -522,7 +523,19 @@ out: Back2 :-<3>- out: Back3 :- out: Front4 :-<1>- out: Back4 :-<2>-<3>- -out: FilterEven :-<2>-<6>- +out: Prefix :-<1>-<2>- +out: ElmL :-<3>- +out: NPrefix :- +out: Types :-<3>- +out: NList :- +out: Types :- +out: LL :-<1>-<2>-<3>-<5>-<6>-<7>- +out: List :-<1>-<2>-<3>-<5>-<6>-<7>- +out: First :-<1>- +out: Tail :-<2>-<3>-<5>-<6>-<7>- +out: Prefix :-<1>-<2>-<3>-<5>-<6>- +out: Last :-<7>- +out: HeadEnd :-<1>-<7>- out: Prefix1 : out: \+---<11>-<22>-\+- out: Prefix2 : @@ -609,6 +622,40 @@ return: 0 END +TEST "type sequence manipulation" TypeSeqManipl_test <-<2>-<3>-<7>-<8>-<9>- +out: Seq :-<1>-<2>-<3>-<7>-<8>-<9>- +out: SeqList :-<1>-<2>-<3>-<7>-<8>-<9>- +out: NulS :- +out: Prepend1 :-<5>-<1>-<2>-<3>- +out: Prepend2 :-<ยท>-<1>-<2>-<3>- +out: Prepend3 :-<5>- +out: Prepend4 :- +out: Seq_0 :-<7>-<8>-<9>-<1>-<2>-<3>- +out: Seq_1 :-<8>-<9>-<1>-<2>-<3>- +out: Seq_2 :-<9>-<1>-<2>-<3>- +out: Seq_3 :-<1>-<2>-<3>- +out: Seq_4 :-<2>-<3>- +out: Seq_5 :-<3>- +out: Seq_6 :- +out: Head_0 :-<7>- +out: Head_1 :-<8>- +out: Head_2 :-<9>- +out: Head_3 :-<1>- +out: Head_4 :-<2>- +out: Head_5 :-<3>- +out: Head_6 :- +out: Seq :-<1>-<2>-<3>-<7>-<8>-<9>- +out: List :-<1>-<2>-<3>-<7>-<8>-<9>- +out: First :-<1>- +out: Tail :-<2>-<3>-<7>-<8>-<9>- +out: Prefix :-<1>-<2>-<3>-<7>-<8>- +out: Last :-<9>- +out: HeadEnd :-<1>-<9>- +return: 0 +END + + TEST "TypeTuple_test" TypeTuple_test <-<3>-<5>- out: L2 :-<2>-<4>- diff --git a/tests/lib/meta/typelist-manip-test.cpp b/tests/lib/meta/typelist-manip-test.cpp index b015c000a..a7e37f18b 100644 --- a/tests/lib/meta/typelist-manip-test.cpp +++ b/tests/lib/meta/typelist-manip-test.cpp @@ -42,7 +42,6 @@ #include "lib/meta/generator.hpp" #include "lib/meta/typelist-util.hpp" #include "meta/typelist-diagnostics.hpp" -//#include "lib/util.hpp" #include #include @@ -98,11 +97,11 @@ namespace test { { check_diagnostics (); check_apply (); + check_filter (); check_append (); check_splice (); check_s_last (); check_dissect(); - check_filter (); check_prefix (); check_distribute(); check_combine(); @@ -244,7 +243,7 @@ namespace test { typedef SplitLast::Type Nil; typedef SplitLast::List NList; - + DISPLAY (NList); DISPLAY (Types); } diff --git a/tests/lib/meta/typeseq-manip-test.cpp b/tests/lib/meta/typeseq-manip-test.cpp index 76fa87387..a64e5f02c 100644 --- a/tests/lib/meta/typeseq-manip-test.cpp +++ b/tests/lib/meta/typeseq-manip-test.cpp @@ -41,7 +41,6 @@ #include "lib/meta/typeseq-util.hpp" #include "lib/meta/typelist-util.hpp" #include "meta/typelist-diagnostics.hpp" -//#include "lib/util.hpp" #include #include @@ -105,8 +104,9 @@ namespace test { DISPLAY (LL); typedef Types::Seq Seq; + typedef Seq::List SeqList; DISPLAY (Seq); - DISPLAY (Seq::List); + DISPLAY (SeqList); typedef Types::Seq NulS; DISPLAY (NulS); @@ -141,8 +141,16 @@ namespace test { typedef Shifted::Type Seq_2; DISPLAY (Seq_2); typedef Shifted::Type Seq_3; DISPLAY (Seq_3); typedef Shifted::Type Seq_4; DISPLAY (Seq_4); + typedef Shifted::Type Seq_5; DISPLAY (Seq_5); + typedef Shifted::Type Seq_6; DISPLAY (Seq_6); + typedef Types::Head> Head_0; DISPLAY (Head_0); + typedef Types::Head> Head_1; DISPLAY (Head_1); typedef Types::Head> Head_2; DISPLAY (Head_2); + typedef Types::Head> Head_3; DISPLAY (Head_3); + typedef Types::Head> Head_4; DISPLAY (Head_4); + typedef Types::Head> Head_5; DISPLAY (Head_5); + typedef Types::Head> Head_6; DISPLAY (Head_6); }