630 lines
31 KiB
C++
630 lines
31 KiB
C++
/* vim: set sw=4 sts=4 et foldmethod=syntax : */
|
|
|
|
/*
|
|
* Copyright (c) 2008, 2009, 2010, 2011 Ciaran McCreesh
|
|
*
|
|
* This file is part of the Paludis package manager. Paludis is free software;
|
|
* you can redistribute it and/or modify it under the terms of the GNU General
|
|
* Public License version 2, as published by the Free Software Foundation.
|
|
*
|
|
* Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
* Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include <paludis/spec_tree.hh>
|
|
#include <paludis/util/sequence-impl.hh>
|
|
#include <paludis/util/wrapped_forward_iterator-impl.hh>
|
|
#include <paludis/util/indirect_iterator-impl.hh>
|
|
#include <algorithm>
|
|
|
|
using namespace paludis;
|
|
using namespace paludis::spec_tree_internals;
|
|
|
|
template <typename Tree_, typename Item_>
|
|
LeafNode<Tree_, Item_>::LeafNode(const std::shared_ptr<const Item_> & i) :
|
|
_spec(i)
|
|
{
|
|
}
|
|
|
|
template <typename Tree_, typename Item_>
|
|
template <typename OtherTree_>
|
|
LeafNode<Tree_, Item_>::operator LeafNode<OtherTree_, Item_> () const
|
|
{
|
|
return LeafNode<OtherTree_, Item_>(_spec);
|
|
}
|
|
|
|
template <typename Tree_, typename Item_>
|
|
const std::shared_ptr<const Item_>
|
|
LeafNode<Tree_, Item_>::spec() const
|
|
{
|
|
return _spec;
|
|
}
|
|
|
|
template <typename Tree_>
|
|
BasicInnerNode<Tree_>::BasicInnerNode() :
|
|
_child_list(std::make_shared<ChildList>())
|
|
{
|
|
}
|
|
|
|
template <typename Tree_>
|
|
typename BasicInnerNode<Tree_>::ConstIterator
|
|
BasicInnerNode<Tree_>::begin() const
|
|
{
|
|
return ConstIterator(_child_list->begin());
|
|
}
|
|
|
|
template <typename Tree_>
|
|
typename BasicInnerNode<Tree_>::ConstIterator
|
|
BasicInnerNode<Tree_>::end() const
|
|
{
|
|
return ConstIterator(_child_list->end());
|
|
}
|
|
|
|
template <typename Tree_>
|
|
void
|
|
BasicInnerNode<Tree_>::append_node(const std::shared_ptr<const BasicNode<Tree_> > & t)
|
|
{
|
|
_child_list->push_back(t);
|
|
}
|
|
|
|
template <typename Tree_>
|
|
template <typename T_>
|
|
const std::shared_ptr<typename Tree_::template NodeType<T_>::Type>
|
|
BasicInnerNode<Tree_>::append(const std::shared_ptr<const T_> & t)
|
|
{
|
|
const std::shared_ptr<typename Tree_::template NodeType<T_>::Type> tt(
|
|
std::make_shared<typename Tree_::template NodeType<T_>::Type>(t));
|
|
append_node(tt);
|
|
return tt;
|
|
}
|
|
|
|
template <typename Tree_>
|
|
template <typename T_>
|
|
const std::shared_ptr<typename Tree_::template NodeType<T_>::Type>
|
|
BasicInnerNode<Tree_>::append(const std::shared_ptr<T_> & t)
|
|
{
|
|
return append(std::shared_ptr<const T_>(t));
|
|
}
|
|
|
|
template <typename Tree_, typename Item_>
|
|
InnerNode<Tree_, Item_>::InnerNode(const std::shared_ptr<const Item_> & i) :
|
|
_spec(i)
|
|
{
|
|
}
|
|
|
|
template <typename Tree_, typename Item_>
|
|
const std::shared_ptr<const Item_>
|
|
InnerNode<Tree_, Item_>::spec() const
|
|
{
|
|
return _spec;
|
|
}
|
|
|
|
template <typename NodeList_, typename RootNode_>
|
|
SpecTree<NodeList_, RootNode_>::SpecTree(const std::shared_ptr<RootNode_> & spec) :
|
|
_top(std::make_shared<typename InnerNodeType<RootNode_>::Type>(spec))
|
|
{
|
|
}
|
|
|
|
template <typename NodeList_, typename RootNode_>
|
|
SpecTree<NodeList_, RootNode_>::SpecTree(const std::shared_ptr<const RootNode_> & spec) :
|
|
_top(std::make_shared<typename InnerNodeType<RootNode_>::Type>(spec))
|
|
{
|
|
}
|
|
|
|
template <typename NodeList_, typename RootNode_>
|
|
const std::shared_ptr<typename SpecTree<NodeList_, RootNode_>::template InnerNodeType<RootNode_>::Type>
|
|
SpecTree<NodeList_, RootNode_>::top()
|
|
{
|
|
return _top;
|
|
}
|
|
|
|
template <typename NodeList_, typename RootNode_>
|
|
const std::shared_ptr<const typename SpecTree<NodeList_, RootNode_>::template InnerNodeType<RootNode_>::Type>
|
|
SpecTree<NodeList_, RootNode_>::top() const
|
|
{
|
|
return _top;
|
|
}
|
|
|
|
namespace
|
|
{
|
|
template <typename Tree_, typename OtherTree_, typename Item_>
|
|
struct InnerNodeCopier
|
|
{
|
|
InnerNode<OtherTree_, Item_> result;
|
|
|
|
InnerNodeCopier(const std::shared_ptr<const Item_> & i) :
|
|
result(i)
|
|
{
|
|
}
|
|
|
|
template <typename T_>
|
|
void visit(const LeafNode<Tree_, T_> & n)
|
|
{
|
|
result.append(n.spec());
|
|
}
|
|
|
|
template <typename T_>
|
|
void visit(const InnerNode<Tree_, T_> & n)
|
|
{
|
|
result.append_node(std::make_shared<InnerNode<OtherTree_, T_>>(n));
|
|
}
|
|
};
|
|
}
|
|
|
|
template <typename Tree_, typename Item_>
|
|
template <typename OtherTree_>
|
|
InnerNode<Tree_, Item_>::operator InnerNode<OtherTree_, Item_> () const
|
|
{
|
|
InnerNodeCopier<Tree_, OtherTree_, Item_> copier(this->spec());
|
|
std::for_each(indirect_iterator(this->begin()), indirect_iterator(this->end()), accept_visitor(copier));
|
|
return copier.result;
|
|
}
|
|
|
|
namespace paludis
|
|
{
|
|
template <typename T_>
|
|
struct WrappedForwardIteratorTraits<BasicInnerNodeConstIteratorTag<T_> >
|
|
{
|
|
typedef typename Sequence<std::shared_ptr<const BasicNode<T_> > >::ConstIterator UnderlyingIterator;
|
|
};
|
|
}
|
|
|
|
namespace paludis
|
|
{
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PlainTextDepSpec>,
|
|
SpecTreeLeafNodeType<PlainTextLabelDepSpec>,
|
|
SpecTreeLeafNodeType<SimpleURIDepSpec>,
|
|
SpecTreeLeafNodeType<FetchableURIDepSpec>,
|
|
SpecTreeLeafNodeType<LicenseDepSpec>,
|
|
SpecTreeLeafNodeType<PackageDepSpec>,
|
|
SpecTreeLeafNodeType<BlockDepSpec>,
|
|
SpecTreeLeafNodeType<URILabelsDepSpec>,
|
|
SpecTreeLeafNodeType<DependenciesLabelsDepSpec>,
|
|
SpecTreeLeafNodeType<NamedSetDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<AnyDepSpec>,
|
|
SpecTreeInnerNodeType<ExactlyOneDepSpec>,
|
|
SpecTreeInnerNodeType<AtMostOneDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<LicenseDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<AnyDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<FetchableURIDepSpec>,
|
|
SpecTreeLeafNodeType<URILabelsDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<SimpleURIDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PackageDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PlainTextDepSpec>,
|
|
SpecTreeLeafNodeType<PlainTextLabelDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PlainTextDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<AnyDepSpec>,
|
|
SpecTreeInnerNodeType<ExactlyOneDepSpec>,
|
|
SpecTreeInnerNodeType<AtMostOneDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PackageDepSpec>,
|
|
SpecTreeLeafNodeType<BlockDepSpec>,
|
|
SpecTreeLeafNodeType<DependenciesLabelsDepSpec>,
|
|
SpecTreeLeafNodeType<NamedSetDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>,
|
|
SpecTreeInnerNodeType<AnyDepSpec>,
|
|
SpecTreeInnerNodeType<ConditionalDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
template class SpecTree<MakeTypeList<
|
|
SpecTreeLeafNodeType<PackageDepSpec>,
|
|
SpecTreeLeafNodeType<NamedSetDepSpec>,
|
|
SpecTreeInnerNodeType<AllDepSpec>
|
|
>::Type, AllDepSpec>;
|
|
|
|
/* GenericSpecTree */
|
|
|
|
template const std::shared_ptr<GenericSpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<GenericSpecTree>::append<PackageDepSpec>(const std::shared_ptr<const PackageDepSpec> &);
|
|
template const std::shared_ptr<GenericSpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<GenericSpecTree>::append<PackageDepSpec>(const std::shared_ptr<PackageDepSpec> &);
|
|
|
|
template const std::shared_ptr<GenericSpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<GenericSpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<const NamedSetDepSpec> &);
|
|
template const std::shared_ptr<GenericSpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<GenericSpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<NamedSetDepSpec> &);
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<GenericSpecTree>;
|
|
}
|
|
|
|
template class WrappedForwardIterator<BasicInnerNode<GenericSpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<GenericSpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, PackageDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, BlockDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, DependenciesLabelsDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, NamedSetDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, PlainTextDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, PlainTextLabelDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, SimpleURIDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, FetchableURIDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, LicenseDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<GenericSpecTree, URILabelsDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<GenericSpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<GenericSpecTree, AnyDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<GenericSpecTree, ExactlyOneDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<GenericSpecTree, AtMostOneDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<GenericSpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
|
|
/* DependencySpecTree */
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<PackageDepSpec>(const std::shared_ptr<const PackageDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<PackageDepSpec>(const std::shared_ptr<PackageDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<const NamedSetDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<NamedSetDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<BlockDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<BlockDepSpec>(const std::shared_ptr<const BlockDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<BlockDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<BlockDepSpec>(const std::shared_ptr<BlockDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<DependenciesLabelsDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<DependenciesLabelsDepSpec>(const std::shared_ptr<const DependenciesLabelsDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<DependenciesLabelsDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<DependenciesLabelsDepSpec>(const std::shared_ptr<DependenciesLabelsDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<AnyDepSpec>(const std::shared_ptr<const AnyDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<AnyDepSpec>(const std::shared_ptr<AnyDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<DependencySpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<DependencySpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<DependencySpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<DependencySpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<DependencySpecTree>;
|
|
|
|
template class PALUDIS_VISIBLE LeafNode<DependencySpecTree, PackageDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<DependencySpecTree, BlockDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<DependencySpecTree, DependenciesLabelsDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<DependencySpecTree, NamedSetDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<DependencySpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<DependencySpecTree, AnyDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<DependencySpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
/* SetSpecTree */
|
|
|
|
template const std::shared_ptr<SetSpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<PackageDepSpec>(const std::shared_ptr<const PackageDepSpec> &);
|
|
template const std::shared_ptr<SetSpecTree::NodeType<PackageDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<PackageDepSpec>(const std::shared_ptr<PackageDepSpec> &);
|
|
|
|
template const std::shared_ptr<SetSpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<const NamedSetDepSpec> &);
|
|
template const std::shared_ptr<SetSpecTree::NodeType<NamedSetDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<NamedSetDepSpec>(const std::shared_ptr<NamedSetDepSpec> &);
|
|
|
|
template const std::shared_ptr<SetSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<SetSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<SetSpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<SetSpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<SetSpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<SetSpecTree>;
|
|
template class PALUDIS_VISIBLE LeafNode<SetSpecTree, PackageDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<SetSpecTree, NamedSetDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<SetSpecTree, AllDepSpec>;
|
|
}
|
|
}
|
|
|
|
/* PlainTextSpecTree */
|
|
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<PlainTextDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<PlainTextDepSpec>(const std::shared_ptr<const PlainTextDepSpec> &);
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<PlainTextDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<PlainTextDepSpec>(const std::shared_ptr<PlainTextDepSpec> &);
|
|
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<PlainTextLabelDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<PlainTextLabelDepSpec>(const std::shared_ptr<const PlainTextLabelDepSpec> &);
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<PlainTextLabelDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<PlainTextLabelDepSpec>(const std::shared_ptr<PlainTextLabelDepSpec> &);
|
|
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<PlainTextSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<PlainTextSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<PlainTextSpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<PlainTextSpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<PlainTextSpecTree>;
|
|
template class PALUDIS_VISIBLE LeafNode<PlainTextSpecTree, PlainTextDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<PlainTextSpecTree, PlainTextLabelDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<PlainTextSpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<PlainTextSpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
/* RequiredUseSpecTree */
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<PlainTextDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<PlainTextDepSpec>(const std::shared_ptr<const PlainTextDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<PlainTextDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<PlainTextDepSpec>(const std::shared_ptr<PlainTextDepSpec> &);
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AnyDepSpec>(const std::shared_ptr<const AnyDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AnyDepSpec>(const std::shared_ptr<AnyDepSpec> &);
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<ExactlyOneDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<ExactlyOneDepSpec>(const std::shared_ptr<const ExactlyOneDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<ExactlyOneDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<ExactlyOneDepSpec>(const std::shared_ptr<ExactlyOneDepSpec> &);
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AtMostOneDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AtMostOneDepSpec>(const std::shared_ptr<const AtMostOneDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<AtMostOneDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<AtMostOneDepSpec>(const std::shared_ptr<AtMostOneDepSpec> &);
|
|
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<RequiredUseSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<RequiredUseSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<RequiredUseSpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<RequiredUseSpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<RequiredUseSpecTree>;
|
|
template class PALUDIS_VISIBLE LeafNode<RequiredUseSpecTree, PlainTextDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<RequiredUseSpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<RequiredUseSpecTree, AnyDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<RequiredUseSpecTree, ExactlyOneDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<RequiredUseSpecTree, AtMostOneDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<RequiredUseSpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
/* SimpleURISpecTree */
|
|
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<SimpleURIDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<SimpleURIDepSpec>(const std::shared_ptr<const SimpleURIDepSpec> &);
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<SimpleURIDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<SimpleURIDepSpec>(const std::shared_ptr<SimpleURIDepSpec> &);
|
|
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<SimpleURISpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<SimpleURISpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<SimpleURISpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<SimpleURISpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<SimpleURISpecTree>;
|
|
template class PALUDIS_VISIBLE LeafNode<SimpleURISpecTree, SimpleURIDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<SimpleURISpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<SimpleURISpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
/* FetchableURISpecTree */
|
|
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<FetchableURIDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<FetchableURIDepSpec>(const std::shared_ptr<const FetchableURIDepSpec> &);
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<FetchableURIDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<FetchableURIDepSpec>(const std::shared_ptr<FetchableURIDepSpec> &);
|
|
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<URILabelsDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<URILabelsDepSpec>(const std::shared_ptr<const URILabelsDepSpec> &);
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<URILabelsDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<URILabelsDepSpec>(const std::shared_ptr<URILabelsDepSpec> &);
|
|
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<FetchableURISpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<FetchableURISpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<FetchableURISpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<FetchableURISpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<FetchableURISpecTree>;
|
|
|
|
template class PALUDIS_VISIBLE LeafNode<FetchableURISpecTree, FetchableURIDepSpec>;
|
|
template class PALUDIS_VISIBLE LeafNode<FetchableURISpecTree, URILabelsDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<FetchableURISpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<FetchableURISpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
|
|
/* LicenseSpecTree */
|
|
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<LicenseDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<LicenseDepSpec>(const std::shared_ptr<const LicenseDepSpec> &);
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<LicenseDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<LicenseDepSpec>(const std::shared_ptr<LicenseDepSpec> &);
|
|
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<AnyDepSpec>(const std::shared_ptr<const AnyDepSpec> &);
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<AnyDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<AnyDepSpec>(const std::shared_ptr<AnyDepSpec> &);
|
|
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<AllDepSpec>(const std::shared_ptr<const AllDepSpec> &);
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<AllDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<AllDepSpec>(const std::shared_ptr<AllDepSpec> &);
|
|
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<const ConditionalDepSpec> &);
|
|
template const std::shared_ptr<LicenseSpecTree::NodeType<ConditionalDepSpec>::Type>
|
|
BasicInnerNode<LicenseSpecTree>::append<ConditionalDepSpec>(const std::shared_ptr<ConditionalDepSpec> &);
|
|
|
|
namespace paludis
|
|
{
|
|
template class WrappedForwardIterator<BasicInnerNode<LicenseSpecTree>::ConstIteratorTag,
|
|
const std::shared_ptr<const BasicNode<LicenseSpecTree> > >;
|
|
|
|
namespace spec_tree_internals
|
|
{
|
|
template class BasicInnerNode<LicenseSpecTree>;
|
|
|
|
template class PALUDIS_VISIBLE LeafNode<LicenseSpecTree, LicenseDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<LicenseSpecTree, AllDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<LicenseSpecTree, AnyDepSpec>;
|
|
template class PALUDIS_VISIBLE InnerNode<LicenseSpecTree, ConditionalDepSpec>;
|
|
}
|
|
}
|
|
|
|
/* SetSpecTree -> DependencySpecTree */
|
|
|
|
template InnerNode<SetSpecTree, AllDepSpec>::operator InnerNode<DependencySpecTree, AllDepSpec> () const;
|
|
template LeafNode<SetSpecTree, PackageDepSpec>::operator LeafNode<DependencySpecTree, PackageDepSpec> () const;
|
|
template LeafNode<SetSpecTree, NamedSetDepSpec>::operator LeafNode<DependencySpecTree, NamedSetDepSpec> () const;
|
|
|
|
/* SetSpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<SetSpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template LeafNode<SetSpecTree, PackageDepSpec>::operator LeafNode<GenericSpecTree, PackageDepSpec> () const;
|
|
template LeafNode<SetSpecTree, NamedSetDepSpec>::operator LeafNode<GenericSpecTree, NamedSetDepSpec> () const;
|
|
|
|
/* DependencySpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<DependencySpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<DependencySpecTree, AnyDepSpec>::operator InnerNode<GenericSpecTree, AnyDepSpec> () const;
|
|
template InnerNode<DependencySpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<DependencySpecTree, PackageDepSpec>::operator LeafNode<GenericSpecTree, PackageDepSpec> () const;
|
|
template LeafNode<DependencySpecTree, NamedSetDepSpec>::operator LeafNode<GenericSpecTree, NamedSetDepSpec> () const;
|
|
template LeafNode<DependencySpecTree, DependenciesLabelsDepSpec>::operator LeafNode<GenericSpecTree, DependenciesLabelsDepSpec> () const;
|
|
template LeafNode<DependencySpecTree, BlockDepSpec>::operator LeafNode<GenericSpecTree, BlockDepSpec> () const;
|
|
|
|
/* LicenseSpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<LicenseSpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<LicenseSpecTree, AnyDepSpec>::operator InnerNode<GenericSpecTree, AnyDepSpec> () const;
|
|
template InnerNode<LicenseSpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<LicenseSpecTree, LicenseDepSpec>::operator LeafNode<GenericSpecTree, LicenseDepSpec> () const;
|
|
|
|
/* SimpleURISpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<SimpleURISpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<SimpleURISpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<SimpleURISpecTree, SimpleURIDepSpec>::operator LeafNode<GenericSpecTree, SimpleURIDepSpec> () const;
|
|
|
|
/* FetchableURISpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<FetchableURISpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<FetchableURISpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<FetchableURISpecTree, FetchableURIDepSpec>::operator LeafNode<GenericSpecTree, FetchableURIDepSpec> () const;
|
|
template LeafNode<FetchableURISpecTree, URILabelsDepSpec>::operator LeafNode<GenericSpecTree, URILabelsDepSpec> () const;
|
|
|
|
/* PlainTextSpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<PlainTextSpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<PlainTextSpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<PlainTextSpecTree, PlainTextDepSpec>::operator LeafNode<GenericSpecTree, PlainTextDepSpec> () const;
|
|
template LeafNode<PlainTextSpecTree, PlainTextLabelDepSpec>::operator LeafNode<GenericSpecTree, PlainTextLabelDepSpec> () const;
|
|
|
|
/* RequiredUseSpecTree -> GenericSpecTree */
|
|
|
|
template InnerNode<RequiredUseSpecTree, AllDepSpec>::operator InnerNode<GenericSpecTree, AllDepSpec> () const;
|
|
template InnerNode<RequiredUseSpecTree, AnyDepSpec>::operator InnerNode<GenericSpecTree, AnyDepSpec> () const;
|
|
template InnerNode<RequiredUseSpecTree, ExactlyOneDepSpec>::operator InnerNode<GenericSpecTree, ExactlyOneDepSpec> () const;
|
|
template InnerNode<RequiredUseSpecTree, AtMostOneDepSpec>::operator InnerNode<GenericSpecTree, AtMostOneDepSpec> () const;
|
|
template InnerNode<RequiredUseSpecTree, ConditionalDepSpec>::operator InnerNode<GenericSpecTree, ConditionalDepSpec> () const;
|
|
template LeafNode<RequiredUseSpecTree, PlainTextDepSpec>::operator LeafNode<GenericSpecTree, PlainTextDepSpec> () const;
|
|
|