00001 #ifndef TAGCOLL_PATCHCOLLECTION_H
00002 #define TAGCOLL_PATCHCOLLECTION_H
00003
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <tagcoll/Collection.h>
00027 #include <tagcoll/Patches.h>
00028
00029 namespace Tagcoll
00030 {
00031
00036 template<class ITEM, class TAG>
00037 class PatchCollection : public Collection<ITEM, TAG>
00038 {
00039 protected:
00040 const Collection<ITEM, TAG>& coll;
00041 PatchList<ITEM, TAG> changes;
00042
00043 virtual void consumeItem(const ITEM& item, const OpSet<TAG>& tags);
00044
00045 virtual OpSet<ITEM> getItemsHavingTag(const TAG& tag) const;
00046 virtual OpSet<TAG> getTagsOfItem(const ITEM& item) const;
00047
00048
00049 public:
00050 PatchCollection(const Collection<ITEM, TAG>& coll) : coll(coll) {}
00051 virtual ~PatchCollection() {}
00052
00056 const PatchList<ITEM, TAG>& getChanges() const { return changes; }
00057
00061 void setChanges(const PatchList<ITEM, TAG>& changes);
00062
00063 virtual bool hasTag(const TAG& tag) const;
00064
00065 virtual OpSet<ITEM> getTaggedItems() const;
00066 virtual OpSet<TAG> getAllTags() const;
00067
00068 virtual int getCardinality(const TAG& tag) const;
00069
00070 virtual void applyChange(const PatchList<ITEM, TAG>& change);
00071
00072 virtual void output(Consumer<ITEM, TAG>& consumer) const;
00073 };
00074
00075 };
00076
00077
00078 #endif