[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