[Debtags-commits] [svn] r1714 - in tagcoll/2.0: . tagcoll

Enrico Zini enrico at costa.debian.org
Tue May 9 00:10:17 UTC 2006


Author: enrico
Date: Tue May  9 00:10:16 2006
New Revision: 1714

Modified:
   tagcoll/2.0/   (props changed)
   tagcoll/2.0/tagcoll/filters.cc
   tagcoll/2.0/tagcoll/filters.h
Log:
 r2601 at viaza:  enrico | 2006-05-07 11:46:37 -0500
 Added TeeFilter


Modified: tagcoll/2.0/tagcoll/filters.cc
==============================================================================
--- tagcoll/2.0/tagcoll/filters.cc	(original)
+++ tagcoll/2.0/tagcoll/filters.cc	Tue May  9 00:10:16 2006
@@ -24,6 +24,7 @@
 
 #include <tests/test-utils.h>
 
+#include <tagcoll/sink.h>
 #include <tagcoll/InputMerger.h>
 
 namespace tut {
@@ -193,6 +194,24 @@
 
 	gen_ensure_coll_equals(reference, result);
 }
+
+template<> template<>
+void to::test<8>()
+{
+	std::string input_coll(
+			"a: 1, 2\n"
+			"b: \n"
+			"c: 2, 3\n"
+			);
+	int count1 = 0;
+	int count2 = 0;
+
+	parseCollection(input_coll, teeFilter(countingSink(count1), countingSink(count2)));
+
+	gen_ensure_equals(count1, 3);
+	gen_ensure_equals(count2, 3);
+}
+
 }
 
 #include <tagcoll/TextFormat.tcc>

Modified: tagcoll/2.0/tagcoll/filters.h
==============================================================================
--- tagcoll/2.0/tagcoll/filters.h	(original)
+++ tagcoll/2.0/tagcoll/filters.h	Tue May  9 00:10:16 2006
@@ -53,6 +53,41 @@
 	}
 };
 
+template<typename OUT>
+NullFilter<OUT> nullFilter(const OUT& out)
+{
+	return NullFilter<OUT>(out);
+}
+
+/**
+ * Filter that does nothing and just passes on the data
+ */
+template<typename OUT1, typename OUT2>
+class TeeFilter : public wibble::mixin::OutputIterator< TeeFilter<OUT1, OUT2> >
+{
+	OUT1 out1;
+	OUT2 out2;
+	
+public:
+	TeeFilter(const OUT1& out1, const OUT2& out2) : out1(out1), out2(out2) {}
+
+	template<typename ITEMS, typename TAGS>
+	TeeFilter<OUT1, OUT2>& operator=(const std::pair<ITEMS, TAGS>& data)
+	{
+		*out1 = data;
+		++out1;
+		*out2 = data;
+		++out2;
+		return *this;
+	}
+};
+
+template<typename OUT1, typename OUT2>
+TeeFilter<OUT1, OUT2> teeFilter(const OUT1& out1, const OUT2& out2)
+{
+	return TeeFilter<OUT1, OUT2>(out1, out2);
+}
+
 /**
  * Store a list of substitutions to operate on std::set
  *



More information about the Debtags-commits mailing list