20#ifndef PALUDIS_GUARD_PALUDIS_SPEC_TREE_HH
21#define PALUDIS_GUARD_PALUDIS_SPEC_TREE_HH 1
23#include <paludis/spec_tree-fwd.hh>
24#include <paludis/util/wrapped_forward_iterator.hh>
25#include <paludis/util/visitor.hh>
31 namespace spec_tree_internals
33 template <
typename Tree_>
41 template <
typename Tree_,
typename Item_>
47 const std::shared_ptr<const Item_> _spec;
50 explicit LeafNode(
const std::shared_ptr<const Item_> & i);
52 template <
typename OtherTree_>
53 operator LeafNode<OtherTree_, Item_> ()
const;
55 const std::shared_ptr<const Item_> spec()
const;
58 template <
typename Tree_,
typename Item_>
61 template <
typename Tree_>
67 std::shared_ptr<ChildList> _child_list;
74 const std::shared_ptr<const BasicNode<Tree_> > > ConstIterator;
76 ConstIterator begin()
const;
78 ConstIterator end()
const;
82 template <
typename T_>
83 const std::shared_ptr<typename Tree_::template NodeType<T_>::Type>
84 append(
const std::shared_ptr<const T_> & t);
86 template <
typename T_>
87 const std::shared_ptr<typename Tree_::template NodeType<T_>::Type>
88 append(
const std::shared_ptr<T_> & t);
91 template <
typename Tree_,
typename Item_>
93 public BasicInnerNode<Tree_>,
97 const std::shared_ptr<const Item_> _spec;
100 explicit InnerNode(
const std::shared_ptr<const Item_> & i);
102 template <
typename OtherTree_>
103 operator InnerNode<OtherTree_, Item_> ()
const;
105 const std::shared_ptr<const Item_> spec()
const;
108 template <
typename Tree_>
114 template <
typename Tree_,
typename Item_,
typename Tail_>
121 template <
typename Tree_,
typename Item_,
typename Tail_>
128 template <
typename Tree_,
typename NodeList_>
135 template <
typename NodeList_,
typename RootNode_>
139 typedef typename spec_tree_internals::MakeVisitableTypeList<SpecTree, NodeList_>::Type VisitableTypeList;
144 template <
typename Node_>
150 template <
typename Node_>
156 template <
typename Node_>
159 typedef typename std::conditional<
161 typename SpecTree::template LeafNodeType<Node_>::Type,
162 typename std::conditional<
164 typename InnerNodeType<Node_>::Type,
170 explicit SpecTree(
const std::shared_ptr<RootNode_> & spec);
172 explicit SpecTree(
const std::shared_ptr<const RootNode_> & spec);
174 const std::shared_ptr<typename InnerNodeType<RootNode_>::Type> top();
176 const std::shared_ptr<const typename InnerNodeType<RootNode_>::Type> top()
const;
179 const std::shared_ptr<typename InnerNodeType<RootNode_>::Type> _top;
259 const std::shared_ptr<const spec_tree_internals::BasicNode<GenericSpecTree> > >;
261 const std::shared_ptr<const spec_tree_internals::BasicNode<DependencySpecTree> > >;
263 const std::shared_ptr<const spec_tree_internals::BasicNode<SetSpecTree> > >;
265 const std::shared_ptr<const spec_tree_internals::BasicNode<PlainTextSpecTree> > >;
267 const std::shared_ptr<const spec_tree_internals::BasicNode<RequiredUseSpecTree> > >;
269 const std::shared_ptr<const spec_tree_internals::BasicNode<SimpleURISpecTree> > >;
271 const std::shared_ptr<const spec_tree_internals::BasicNode<FetchableURISpecTree> > >;
273 const std::shared_ptr<const spec_tree_internals::BasicNode<LicenseSpecTree> > >;
Definition dep_spec.hh:139
Definition visitor.hh:326
Definition visitor.hh:411
Definition sequence.hh:51
Definition spec_tree.hh:137
Definition wrapped_forward_iterator.hh:42
Definition spec_tree.hh:64
Definition spec_tree.hh:36
Definition spec_tree.hh:95
Definition spec_tree.hh:45
#define PALUDIS_VISIBLE
Definition attributes.hh:59
Definition about_metadata-fwd.hh:24
Definition type_list-fwd.hh:31
Definition spec_tree-fwd.hh:29
Definition spec_tree-fwd.hh:32
Definition spec_tree.hh:152
Definition spec_tree.hh:146
Definition spec_tree.hh:158
Definition type_list-fwd.hh:46
Definition type_list.hh:33
Definition type_list.hh:28
Definition spec_tree-fwd.hh:49
Definition spec_tree-fwd.hh:52
Definition spec_tree.hh:130
Definition spec_tree-fwd.hh:67