spec_tree-fwd.hh

00001 /* vim: set sw=4 sts=4 et foldmethod=syntax : */
00002 
00003 /*
00004  * Copyright (c) 2008, 2009 Ciaran McCreesh
00005  *
00006  * This file is part of the Paludis package manager. Paludis is free software;
00007  * you can redistribute it and/or modify it under the terms of the GNU General
00008  * Public License version 2, as published by the Free Software Foundation.
00009  *
00010  * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
00011  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00012  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
00013  * details.
00014  *
00015  * You should have received a copy of the GNU General Public License along with
00016  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00017  * Place, Suite 330, Boston, MA  02111-1307  USA
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

Generated on Mon Sep 21 10:36:08 2009 for paludis by  doxygen 1.5.4