00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_SPEC_TREE_FWD_HH
00021 #define PALUDIS_GUARD_PALUDIS_SPEC_TREE_FWD_HH 1
00022
00023 #include <paludis/util/type_list.hh>
00024 #include <paludis/dep_spec-fwd.hh>
00025
00026 namespace paludis
00027 {
00028 template <typename T_>
00029 struct SpecTreeInnerNodeType;
00030
00031 template <typename T_>
00032 struct SpecTreeLeafNodeType;
00033
00034 namespace spec_tree_internals
00035 {
00036 template <typename Tree_>
00037 class BasicNode;
00038
00039 template <typename Tree_, typename Item_>
00040 class LeafNode;
00041
00042 template <typename Tree_, typename Item_>
00043 struct InnerNode;
00044
00045 template <typename Tree_>
00046 class BasicInnerNode;
00047
00048 template <typename Tree_, typename NodeList_>
00049 struct MakeVisitableTypeListEntry;
00050
00051 template <typename Tree_>
00052 struct MakeVisitableTypeListEntry<Tree_, TypeListTail>;
00053
00054 template <typename Tree_, typename Item_, typename Tail_>
00055 struct MakeVisitableTypeListEntry<Tree_, TypeListEntry<SpecTreeInnerNodeType<Item_>, Tail_> >;
00056
00057 template <typename Tree_, typename Item_, typename Tail_>
00058 struct MakeVisitableTypeListEntry<Tree_, TypeListEntry<SpecTreeLeafNodeType<Item_>, Tail_> >;
00059
00060 template <typename Tree_, typename NodeList_>
00061 struct MakeVisitableTypeList;
00062
00063 template <typename Tree_, typename Node_>
00064 struct TreeCannotContainNodeType;
00065 }
00066
00067 template <typename NodeList_, typename RootNode_>
00068 class SpecTree;
00069
00070 typedef SpecTree<MakeTypeList<
00071 SpecTreeLeafNodeType<PlainTextDepSpec>,
00072 SpecTreeLeafNodeType<PlainTextLabelDepSpec>,
00073 SpecTreeLeafNodeType<SimpleURIDepSpec>,
00074 SpecTreeLeafNodeType<FetchableURIDepSpec>,
00075 SpecTreeLeafNodeType<LicenseDepSpec>,
00076 SpecTreeLeafNodeType<PackageDepSpec>,
00077 SpecTreeLeafNodeType<BlockDepSpec>,
00078 SpecTreeLeafNodeType<URILabelsDepSpec>,
00079 SpecTreeLeafNodeType<DependencyLabelsDepSpec>,
00080 SpecTreeLeafNodeType<NamedSetDepSpec>,
00081 SpecTreeInnerNodeType<AllDepSpec>,
00082 SpecTreeInnerNodeType<AnyDepSpec>,
00083 SpecTreeInnerNodeType<ConditionalDepSpec>
00084 >::Type, AllDepSpec> GenericSpecTree;
00085
00086 typedef SpecTree<MakeTypeList<
00087 SpecTreeLeafNodeType<LicenseDepSpec>,
00088 SpecTreeInnerNodeType<AllDepSpec>,
00089 SpecTreeInnerNodeType<AnyDepSpec>,
00090 SpecTreeInnerNodeType<ConditionalDepSpec>
00091 >::Type, AllDepSpec> LicenseSpecTree;
00092
00093 typedef SpecTree<MakeTypeList<
00094 SpecTreeLeafNodeType<FetchableURIDepSpec>,
00095 SpecTreeLeafNodeType<URILabelsDepSpec>,
00096 SpecTreeInnerNodeType<AllDepSpec>,
00097 SpecTreeInnerNodeType<ConditionalDepSpec>
00098 >::Type, AllDepSpec> FetchableURISpecTree;
00099
00100 typedef SpecTree<MakeTypeList<
00101 SpecTreeLeafNodeType<SimpleURIDepSpec>,
00102 SpecTreeInnerNodeType<AllDepSpec>,
00103 SpecTreeInnerNodeType<ConditionalDepSpec>
00104 >::Type, AllDepSpec> SimpleURISpecTree;
00105
00106 typedef SpecTree<MakeTypeList<
00107 SpecTreeLeafNodeType<PackageDepSpec>,
00108 SpecTreeInnerNodeType<AllDepSpec>,
00109 SpecTreeInnerNodeType<ConditionalDepSpec>
00110 >::Type, AllDepSpec> ProvideSpecTree;
00111
00112 typedef SpecTree<MakeTypeList<
00113 SpecTreeLeafNodeType<PlainTextDepSpec>,
00114 SpecTreeLeafNodeType<PlainTextLabelDepSpec>,
00115 SpecTreeInnerNodeType<AllDepSpec>,
00116 SpecTreeInnerNodeType<ConditionalDepSpec>
00117 >::Type, AllDepSpec> PlainTextSpecTree;
00118
00119 typedef SpecTree<MakeTypeList<
00120 SpecTreeLeafNodeType<PackageDepSpec>,
00121 SpecTreeLeafNodeType<BlockDepSpec>,
00122 SpecTreeLeafNodeType<DependencyLabelsDepSpec>,
00123 SpecTreeLeafNodeType<NamedSetDepSpec>,
00124 SpecTreeInnerNodeType<AllDepSpec>,
00125 SpecTreeInnerNodeType<AnyDepSpec>,
00126 SpecTreeInnerNodeType<ConditionalDepSpec>
00127 >::Type, AllDepSpec> DependencySpecTree;
00128
00129 typedef SpecTree<MakeTypeList<
00130 SpecTreeLeafNodeType<PackageDepSpec>,
00131 SpecTreeLeafNodeType<NamedSetDepSpec>,
00132 SpecTreeInnerNodeType<AllDepSpec>
00133 >::Type, AllDepSpec> SetSpecTree;
00134 }
00135
00136 #endif