00001 #ifndef DEBTAGS_TODO_H
00002 #define DEBTAGS_TODO_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <debtags/Tag.h>
00026 #include <debtags/Filters.h>
00027 #include <debtags/Status.h>
00028 #include <tagcoll/CardinalityStore.h>
00029 #include <map>
00030
00031
00032 namespace Debtags
00033 {
00034
00044 template <class ITEM>
00045 class Specials : public Tagcoll::Consumer<ITEM, Tag>
00046 {
00047 protected:
00048 Tagcoll::CardinalityStore<ITEM, Facet> coll;
00049 TagToFacet<ITEM> tagStripper;
00050 unsigned int maxPerGroup;
00051 bool computed;
00052
00053 virtual void consumeItemUntagged(const ITEM& item)
00054 {
00055 tagStripper.consume(item);
00056 }
00057 virtual void consumeItem(const ITEM& item, const Tagcoll::OpSet<Tag>& tags)
00058 {
00059 tagStripper.consume(item, tags);
00060 }
00061 virtual void consumeItemsUntagged(const Tagcoll::OpSet<ITEM>& items)
00062 {
00063 tagStripper.consume(items);
00064 }
00065 virtual void consumeItems(const Tagcoll::OpSet<ITEM>& items, const Tagcoll::OpSet<Tag>& tags)
00066 {
00067 tagStripper.consume(items, tags);
00068 }
00069
00070 public:
00071 Specials(unsigned int maxPerGroup = 0) :
00072 tagStripper(coll), maxPerGroup(maxPerGroup), computed(false) {}
00073 virtual ~Specials() {}
00074
00075 bool isComputed() const { return computed; }
00076 void compute(Status* tracker = 0);
00077 void clear()
00078 {
00079 coll = Tagcoll::CardinalityStore<ITEM, Facet>(); specials.clear();
00080 computed = false;
00081 }
00082
00083 std::map<Facet, Tagcoll::OpSet<ITEM> > specials;
00084 };
00085
00086 }
00087
00088
00089 #endif