[Debtags-commits] [svn] r901 - libdebtags1/trunk/debtags
Enrico Zini
debtags-commits@lists.alioth.debian.org
Sat, 18 Jun 2005 12:45:42 +0000
Author: enrico
Date: Sat Jun 18 12:45:41 2005
New Revision: 901
Modified:
libdebtags1/trunk/debtags/BasicPackageMatcher.cc
libdebtags1/trunk/debtags/BasicPackageMatcher.h
libdebtags1/trunk/debtags/DebtagsFilters.cc
libdebtags1/trunk/debtags/DebtagsFilters.h
libdebtags1/trunk/debtags/instantiations.cc
libdebtags1/trunk/debtags/instantiations1.cc
Log:
More support for using std::string for packages
Modified: libdebtags1/trunk/debtags/BasicPackageMatcher.cc
==============================================================================
--- libdebtags1/trunk/debtags/BasicPackageMatcher.cc (original)
+++ libdebtags1/trunk/debtags/BasicPackageMatcher.cc Sat Jun 18 12:45:41 2005
@@ -9,13 +9,33 @@
using namespace Tagcoll;
using namespace Debtags;
-BasicPackageMatcher::~BasicPackageMatcher() throw ()
+template<class ITEM>
+BasicPackageMatcher<ITEM>::~BasicPackageMatcher() throw ()
{
if (name) delete name;
if (str) delete str;
}
-void BasicPackageMatcher::setName(const std::string _name) throw ()
+template<class ITEM>
+Package BasicPackageMatcher<ITEM>::getPackage(const ITEM& item) const
+{
+ return pdb.getPackage(item);
+}
+
+#ifndef INSTANTIATING_TEMPLATES
+template<>
+Package BasicPackageMatcher<Package>::getPackage(const Package& item) const
+{
+ return item;
+}
+#else
+template<>
+Package BasicPackageMatcher<Package>::getPackage(const Package& item) const;
+#endif
+
+
+template<class ITEM>
+void BasicPackageMatcher<ITEM>::setName(const std::string _name) throw ()
{
try {
if (_name.empty())
@@ -30,7 +50,8 @@
}
}
-void BasicPackageMatcher::setString(const std::string _str) throw ()
+template<class ITEM>
+void BasicPackageMatcher<ITEM>::setString(const std::string _str) throw ()
{
try {
if (_str.empty())
@@ -45,25 +66,29 @@
}
}
-bool BasicPackageMatcher::matchName(const std::string& text) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::matchName(const std::string& text) const throw ()
{
if (name == 0)
return true;
return name->match(text);
}
-bool BasicPackageMatcher::matchMaintainer(const std::string& text) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::matchMaintainer(const std::string& text) const throw ()
{
if (maint.empty())
return true;
return text.find(maint) != string::npos;
}
-bool BasicPackageMatcher::matchString(const std::string& text) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::matchString(const std::string& text) const throw ()
{
if (str == 0)
return true;
return str->match(text);
}
-bool BasicPackageMatcher::matchInstalled(int status) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::matchInstalled(int status) const throw ()
{
if (installed == ANY)
return true;
@@ -73,15 +98,21 @@
return true;
return false;
}
-bool BasicPackageMatcher::matchDebtags(const TagSet& ptags) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::matchDebtags(const TagSet& ptags) const throw ()
{
if (tags.empty())
return true;
return ptags.contains(tags);
}
-bool BasicPackageMatcher::match(const Package& pkg, const OpSet<Tag>& tags) const throw ()
+template<class ITEM>
+bool BasicPackageMatcher<ITEM>::match(const ITEM& item, const OpSet<Tag>& tags) const throw ()
{
+ Package pkg = getPackage(item);
+ if (!pkg)
+ return false;
+
bool got = true;
if (hasMaintainer() && !matchMaintainer(pkg.maint()))
got = false;
@@ -102,12 +133,14 @@
}
-void BasicPackageMatcher::consume(const Package& item) throw ()
+template<class ITEM>
+void BasicPackageMatcher<ITEM>::consume(const ITEM& item) throw ()
{
consume(item, OpSet<Tag>());
}
-void BasicPackageMatcher::consume(const Package& item, const OpSet<Tag>& tags) throw ()
+template<class ITEM>
+void BasicPackageMatcher<ITEM>::consume(const ITEM& item, const OpSet<Tag>& tags) throw ()
{
if (match(item, tags))
consumer->consume(item, tags);
Modified: libdebtags1/trunk/debtags/BasicPackageMatcher.h
==============================================================================
--- libdebtags1/trunk/debtags/BasicPackageMatcher.h (original)
+++ libdebtags1/trunk/debtags/BasicPackageMatcher.h Sat Jun 18 12:45:41 2005
@@ -1,5 +1,5 @@
-#ifndef DEBTAGS_BASIC_PACKAGE_FILTER_H
-#define DEBTAGS_BASIC_PACKAGE_FILTER_H
+#ifndef DEBTAGS_BASIC_PACKAGE_MATCHER_H
+#define DEBTAGS_BASIC_PACKAGE_MATCHER_H
#pragma interface
@@ -7,6 +7,7 @@
#include <debtags/Tag.h>
#include <debtags/TagSet.h>
#include <debtags/Consumer.h>
+#include <debtags/PackageDB.h>
#include <tagcoll/TagcollFilter.h>
@@ -18,7 +19,8 @@
class Package;
class Regexp;
-class BasicPackageMatcher : public PackageMatcher, public Tagcoll::TagcollFilter<Package, Tag>
+template <class ITEM>
+class BasicPackageMatcher : public PackageMatcher, public Tagcoll::TagcollFilter<ITEM, Tag>
{
public:
typedef enum { YES, NO, ANY } InstalledStatus;
@@ -28,10 +30,13 @@
Regexp* str;
InstalledStatus installed;
TagSet tags;
+ PackageDB pdb;
+
+ Package getPackage(const ITEM& item) const;
public:
- BasicPackageMatcher() throw ()
- : name(0), str(0), installed(ANY) {}
+ BasicPackageMatcher(const PackageDB& pdb) throw ()
+ : name(0), str(0), installed(ANY), pdb(pdb) {}
virtual ~BasicPackageMatcher() throw ();
void setName(const std::string _name) throw ();
@@ -66,10 +71,10 @@
bool matchDebtags(const TagSet& ptags) const throw ();
const TagSet& debtagsTagset() const throw () { return tags; }
- bool match(const Package& pkg, const OpSet<Tag>& tags) const throw ();
+ bool match(const ITEM& pkg, const OpSet<Tag>& tags) const throw ();
- void consume(const Package& item) throw ();
- void consume(const Package& item, const OpSet<Tag>& tags) throw ();
+ void consume(const ITEM& item) throw ();
+ void consume(const ITEM& item, const OpSet<Tag>& tags) throw ();
};
};
Modified: libdebtags1/trunk/debtags/DebtagsFilters.cc
==============================================================================
--- libdebtags1/trunk/debtags/DebtagsFilters.cc (original)
+++ libdebtags1/trunk/debtags/DebtagsFilters.cc Sat Jun 18 12:45:41 2005
@@ -4,14 +4,14 @@
#include <debtags/DebtagsFilters.h>
#include <debtags/DebtagsSerializer.h>
-#include <debtags/Package.h>
#include <debtags/Tag.h>
#include <tagcoll/tagexpr/TagexprParser.h>
using namespace std;
using namespace Debtags;
-ExpressionFilter::ExpressionFilter(Tagcoll::Serializer<Package, Tag>& ser, const std::string& expression) throw (ConsistencyCheckException)
+template<class ITEM>
+ExpressionFilter<ITEM>::ExpressionFilter(Tagcoll::Serializer<ITEM, Tag>& ser, const std::string& expression) throw (ConsistencyCheckException)
: ser(ser), expr(0)
{
expr = Tagcoll::TagexprParser::instance()->parse(expression);
@@ -19,9 +19,10 @@
throw ConsistencyCheckException("compiling tag expression \"" + expression + "\" failed");
}
-ExpressionFilter::ExpressionFilter(Tagcoll::Serializer<Package, Tag>& ser, const std::string& expression, Tagcoll::TagcollConsumer<Package, Tag>* cons)
+template<class ITEM>
+ExpressionFilter<ITEM>::ExpressionFilter(Tagcoll::Serializer<ITEM, Tag>& ser, const std::string& expression, Tagcoll::TagcollConsumer<ITEM, Tag>* cons)
throw (ConsistencyCheckException)
- : Tagcoll::TagcollFilter<Package, Tag>(cons),
+ : Tagcoll::TagcollFilter<ITEM, Tag>(cons),
ser(ser), expr(0)
{
expr = Tagcoll::TagexprParser::instance()->parse(expression);
@@ -29,28 +30,33 @@
throw ConsistencyCheckException("compiling tag expression \"" + expression + "\" failed");
}
-ExpressionFilter::~ExpressionFilter() throw ()
+template<class ITEM>
+ExpressionFilter<ITEM>::~ExpressionFilter() throw ()
{
if (expr)
delete expr;
}
-void ExpressionFilter::consume(const Package& item) throw ()
+template<class ITEM>
+void ExpressionFilter<ITEM>::consume(const ITEM& item) throw ()
{
if (expr->eval(Tagcoll::OpSet<string>()))
consumer->consume(item);
}
-void ExpressionFilter::consume(const Package& item, const Tagcoll::OpSet<Tag>& tags) throw ()
+template<class ITEM>
+void ExpressionFilter<ITEM>::consume(const ITEM& item, const Tagcoll::OpSet<Tag>& tags) throw ()
{
if (expr->eval(ser.tagsToStrings(tags)))
consumer->consume(item, tags);
}
-void ExpressionFilter::consume(const Tagcoll::OpSet<Debtags::Package>& items) throw ()
+template<class ITEM>
+void ExpressionFilter<ITEM>::consume(const Tagcoll::OpSet<ITEM>& items) throw ()
{
if (expr->eval(Tagcoll::OpSet<string>()))
consumer->consume(items);
}
-void ExpressionFilter::consume(const Tagcoll::OpSet<Debtags::Package>& items, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ()
+template<class ITEM>
+void ExpressionFilter<ITEM>::consume(const Tagcoll::OpSet<ITEM>& items, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ()
{
if (expr->eval(ser.tagsToStrings(tags)))
consumer->consume(items, tags);
@@ -58,20 +64,25 @@
-UntaggedFilter::UntaggedFilter(bool inverse) throw ()
+template<class ITEM>
+UntaggedFilter<ITEM>::UntaggedFilter(bool inverse) throw ()
: inverse(inverse) {}
-UntaggedFilter::UntaggedFilter(Tagcoll::TagcollConsumer<Package, Tag>* cons, bool inverse)
- throw () : Tagcoll::TagcollFilter<Package, Tag>(cons), inverse(inverse) {}
+template<class ITEM>
+UntaggedFilter<ITEM>::UntaggedFilter(Tagcoll::TagcollConsumer<ITEM, Tag>* cons, bool inverse)
+ throw () : Tagcoll::TagcollFilter<ITEM, Tag>(cons), inverse(inverse) {}
-UntaggedFilter::~UntaggedFilter() throw () {}
+template<class ITEM>
+UntaggedFilter<ITEM>::~UntaggedFilter() throw () {}
-void UntaggedFilter::consume(const Package& item) throw ()
+template<class ITEM>
+void UntaggedFilter<ITEM>::consume(const ITEM& item) throw ()
{
if (!inverse)
consumer->consume(item);
}
-void UntaggedFilter::consume(const Package& item, const Tagcoll::OpSet<Tag>& tags) throw ()
+template<class ITEM>
+void UntaggedFilter<ITEM>::consume(const ITEM& item, const Tagcoll::OpSet<Tag>& tags) throw ()
{
if (tags.empty())
consume(item);
@@ -79,12 +90,14 @@
if (inverse)
consumer->consume(item, tags);
}
-void UntaggedFilter::consume(const Tagcoll::OpSet<Debtags::Package>& items) throw ()
+template<class ITEM>
+void UntaggedFilter<ITEM>::consume(const Tagcoll::OpSet<ITEM>& items) throw ()
{
if (!inverse)
consumer->consume(items);
}
-void UntaggedFilter::consume(const Tagcoll::OpSet<Debtags::Package>& items, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ()
+template<class ITEM>
+void UntaggedFilter<ITEM>::consume(const Tagcoll::OpSet<ITEM>& items, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ()
{
if (tags.empty())
consume(items);
Modified: libdebtags1/trunk/debtags/DebtagsFilters.h
==============================================================================
--- libdebtags1/trunk/debtags/DebtagsFilters.h (original)
+++ libdebtags1/trunk/debtags/DebtagsFilters.h Sat Jun 18 12:45:41 2005
@@ -41,40 +41,42 @@
/**
* Filter that allows only packages matching a tag expression
*/
-class ExpressionFilter : public Tagcoll::TagcollFilter<Package, Tag>
+template <class ITEM>
+class ExpressionFilter : public Tagcoll::TagcollFilter<ITEM, Tag>
{
protected:
- Tagcoll::Serializer<Package, Tag>& ser;
+ Tagcoll::Serializer<ITEM, Tag>& ser;
Tagcoll::Tagexpr* expr;
public:
- ExpressionFilter(Tagcoll::Serializer<Package, Tag>& ser, const std::string& expression) throw (ConsistencyCheckException);
- ExpressionFilter(Tagcoll::Serializer<Package, Tag>& ser, const std::string& expression, Tagcoll::TagcollConsumer<Package, Tag>* cons) throw (ConsistencyCheckException);
+ ExpressionFilter(Tagcoll::Serializer<ITEM, Tag>& ser, const std::string& expression) throw (ConsistencyCheckException);
+ ExpressionFilter(Tagcoll::Serializer<ITEM, Tag>& ser, const std::string& expression, Tagcoll::TagcollConsumer<ITEM, Tag>* cons) throw (ConsistencyCheckException);
virtual ~ExpressionFilter() throw ();
- virtual void consume(const Debtags::Package& item) throw ();
- virtual void consume(const Debtags::Package& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
- virtual void consume(const Tagcoll::OpSet<Debtags::Package>& item) throw ();
- virtual void consume(const Tagcoll::OpSet<Debtags::Package>& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
+ virtual void consume(const ITEM& item) throw ();
+ virtual void consume(const ITEM& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
+ virtual void consume(const Tagcoll::OpSet<ITEM>& item) throw ();
+ virtual void consume(const Tagcoll::OpSet<ITEM>& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
};
/**
* Filter that allows only packages with no tags
*/
-class UntaggedFilter : public Tagcoll::TagcollFilter<Package, Tag>
+template <class ITEM>
+class UntaggedFilter : public Tagcoll::TagcollFilter<ITEM, Tag>
{
protected:
bool inverse;
public:
UntaggedFilter(bool inverse = false) throw ();
- UntaggedFilter(Tagcoll::TagcollConsumer<Package, Tag>* cons, bool inverse = false) throw ();
+ UntaggedFilter(Tagcoll::TagcollConsumer<ITEM, Tag>* cons, bool inverse = false) throw ();
virtual ~UntaggedFilter() throw ();
- virtual void consume(const Debtags::Package& item) throw ();
- virtual void consume(const Debtags::Package& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
- virtual void consume(const Tagcoll::OpSet<Debtags::Package>& item) throw ();
- virtual void consume(const Tagcoll::OpSet<Debtags::Package>& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
+ virtual void consume(const ITEM& item) throw ();
+ virtual void consume(const ITEM& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
+ virtual void consume(const Tagcoll::OpSet<ITEM>& item) throw ();
+ virtual void consume(const Tagcoll::OpSet<ITEM>& item, const Tagcoll::OpSet<Debtags::Tag>& tags) throw ();
};
};
Modified: libdebtags1/trunk/debtags/instantiations.cc
==============================================================================
--- libdebtags1/trunk/debtags/instantiations.cc (original)
+++ libdebtags1/trunk/debtags/instantiations.cc Sat Jun 18 12:45:41 2005
@@ -3,8 +3,6 @@
#include <debtags/Package.h>
#include <debtags/Tag.h>
#include <debtags/DebtagsSerializer.h>
-#include <debtags/TagDB.h>
-#include <debtags/DebtagsSimple.h>
#include <tagcoll/FilterChain.cc>
#include <tagcoll/InputMerger.cc>
@@ -24,34 +22,52 @@
#include <tagcoll/TDBReadonlyDiskIndex.cc>
#include <debtags/TagDB.cc>
#include <debtags/DebtagsSimple.cc>
+#include <debtags/DebtagsFilters.cc>
// Instantiate tagcoll template for Debtags::Package items
+template class FilterChain<std::string, Debtags::Tag>;
template class FilterChain<Debtags::Package, Debtags::Tag>;
+template class InputMerger<std::string, Debtags::Tag>;
template class InputMerger<Debtags::Package, Debtags::Tag>;
template class ItemGrouper<std::string, Debtags::Tag>;
template class ItemGrouper<Debtags::Package, Debtags::Tag>;
template class OpSet<Debtags::Package>;
template class OpSet<Debtags::Tag>;
template class OpSet<Debtags::Facet>;
+template class SmartHierarchyNode<std::string, Debtags::Tag>;
template class SmartHierarchyNode<Debtags::Package, Debtags::Tag>;
+template class TagcollConsumer<std::string, Debtags::Tag>;
template class TagcollConsumer<Debtags::Package, Debtags::Tag>;
+template class TagCollection<std::string, Debtags::Tag>;
template class TagCollection<Debtags::Package, Debtags::Tag>;
+template class TagcollFilter<std::string, Debtags::Tag>;
template class TagcollFilter<Debtags::Package, Debtags::Tag>;
+template class Patch<std::string, Debtags::Tag>;
template class Patch<Debtags::Package, Debtags::Tag>;
+template class PatchList<std::string, Debtags::Tag>;
template class PatchList<Debtags::Package, Debtags::Tag>;
template class Serializer<std::string, Debtags::Tag>;
template class Serializer<Debtags::Package, Debtags::Tag>;
+template class ToStrings<std::string, Debtags::Tag>;
template class ToStrings<Debtags::Package, Debtags::Tag>;
+template class FromStrings<std::string, Debtags::Tag>;
template class FromStrings<Debtags::Package, Debtags::Tag>;
template class TextFormat<std::string, Debtags::Tag>;
template class TextFormat<Debtags::Package, Debtags::Tag>;
+template class DiskIndex<std::string, Debtags::Tag>;
template class DiskIndex<Debtags::Package, Debtags::Tag>;
+template class TDBDiskIndex<std::string, Debtags::Tag>;
template class TDBDiskIndex<Debtags::Package, Debtags::Tag>;
+template class TDBReadonlyDiskIndex<std::string, Debtags::Tag>;
template class TDBReadonlyDiskIndex<Debtags::Package, Debtags::Tag>;
-template class Debtags::TagDB<std::string>;
-template class Debtags::TagDB<Debtags::Package>;
-template class Debtags::DebtagsSimple<std::string>;
-template class Debtags::DebtagsSimple<Debtags::Package>;
+template class TagDB<std::string>;
+template class TagDB<Debtags::Package>;
+template class DebtagsSimple<std::string>;
+template class DebtagsSimple<Debtags::Package>;
+template class ExpressionFilter<std::string>;
+template class ExpressionFilter<Debtags::Package>;
+template class UntaggedFilter<std::string>;
+template class UntaggedFilter<Debtags::Package>;
// vim:set ts=4 sw=4:
Modified: libdebtags1/trunk/debtags/instantiations1.cc
==============================================================================
--- libdebtags1/trunk/debtags/instantiations1.cc (original)
+++ libdebtags1/trunk/debtags/instantiations1.cc Sat Jun 18 12:45:41 2005
@@ -9,6 +9,7 @@
#include <tagcoll/Implications.cc>
#include <tagcoll/SmartHierarchy.cc>
#include <debtags/DebtagsTODO.cc>
+#include <debtags/BasicPackageMatcher.cc>
/*
#include <tagcoll/FilterChain.cc>
#include <tagcoll/InputMerger.cc>
@@ -34,6 +35,8 @@
template class SmartHierarchyNode<Debtags::Package, Debtags::Facet>;
template class DebtagsTODOSpecials<std::string>;
template class DebtagsTODOSpecials<Debtags::Package>;
+template class BasicPackageMatcher<std::string>;
+template class BasicPackageMatcher<Debtags::Package>;
/*
template class InputMerger<Debtags::Package, Debtags::Tag>;