2. Query System, Part 1

2.1. Meta & Child

2.1.1. Meta Class

2.1.2. Child Class

2.2. Operators

2.3. Query Metadata

2.3.1. Node.meta(string)

1const string &meta ( const string &key ) const;
2      string &meta ( const string &key );

2.3.2. Node.meta(Meta)

1const   string  &meta ( const Meta<          void            > &kwd ) const;
2        string  &meta ( const Meta<          void            > &kwd );
3          TYPE   meta ( const Meta<          TYPE,  CONVERTER> &kwd ) const;
4optional <TYPE>  meta ( const Meta<optional <TYPE>, CONVERTER> &kwd ) const;
5Defaulted<TYPE>  meta ( const Meta<Defaulted<TYPE>, CONVERTER> &kwd ) const;
6          TYPE   meta ( const Meta<variant  <Ts...>,CONVERTER> &kwd ) const;

2.3.3. Node(Meta)

1decltype(auto) operator()( const Meta<TYPE,CONVERTER> &kwd ) const;
2decltype(auto) operator()( const Meta<TYPE,CONVERTER> &kwd );

2.4. Query Child Nodes

2.4.1. Node.one(string)

1const Node &one( const string &key, const FILTER &filter ) const;
2      Node &one( const string &key, const FILTER &filter );
3const Node &one( const string &key                       ) const;
4      Node &one( const string &key                       );

2.4.2. Node.many(string)

1CONTAINER<Node> many( const string &key, const FILTER &filter ) const;
2CONTAINER<Node> many( const string &key                       ) const;

2.4.3. Node.child(Child)

 1    const Node &child( const Child<void,             one,  void,      FILTER> &kwd ) const;
 2          Node &child( const Child<void,             one,  void,      FILTER> &kwd );
 3CONTAINER<Node> child( const Child<void,             many, void,      FILTER> &kwd ) const;
 4          TYPE  child( const Child<TYPE,             one,  CONVERTER, FILTER> &kwd ) const;
 5 optional<TYPE> child( const Child<optional <TYPE>,  one,  CONVERTER, FILTER> &kwd ) const;
 6Defaulted<TYPE> child( const Child<Defaulted<TYPE>,  one,  CONVERTER, FILTER> &kwd ) const;
 7          TYPE  child( const Child<variant  <Ts...>, one,  CONVERTER, FILTER> &kwd ) const;
 8CONTAINER<TYPE> child( const Child<TYPE,             many, CONVERTER, FILTER> &kwd ) const;
 9CONTAINER<TYPE> child( const Child<optional <TYPE>,  many, CONVERTER, FILTER> &kwd ) const;
10CONTAINER<TYPE> child( const Child<Defaulted<TYPE>,  many, CONVERTER, FILTER> &kwd ) const;
11CONTAINER<TYPE> child( const Child<variant  <Ts...>, many, CONVERTER, FILTER> &kwd ) const;

2.4.4. Node(Child)

1decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd                          ) const;
2decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd                          );
3decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd, const string label      ) const;
4decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd, const string label      );
5decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd, const regex  labelRegex ) const;
6decltype(auto) operator()( const Child<TYPE,ALLOW,CONVERTER,FILTER> &kwd, const regex  labelRegex );