[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>;