00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZTupleIndex_General__
00026 #define __ZTupleIndex_General__
00027 #include "zconfig.h"
00028
00029 #include "ZTupleIndex.h"
00030
00031 #include <set>
00032 #include <vector>
00033
00034
00035 #pragma mark -
00036 #pragma mark * ZTupleIndex_General
00037
00038 class ZTupleIndex_General : public ZTupleIndex
00039 {
00040 public:
00041 static const int kMaxProperties = 4;
00042
00043 ZTupleIndex_General(const std::string* iPropNames, size_t iPropNameCount);
00044
00045 virtual void Add(uint64 iID, const ZTuple* iTuple);
00046
00047 virtual void Remove(uint64 iID, const ZTuple* iTuple);
00048
00049 virtual void Find(const std::set<uint64>& iSkipIDs,
00050 std::vector<const ZTBSpec::Criterion*>& ioCriteria, std::vector<uint64>& oIDs);
00051
00052 virtual size_t CanHandle(const ZTBSpec::CriterionSect& iCriterionSect);
00053
00054 virtual void WriteDescription(const ZStrimW& s);
00055
00056 private:
00057 class Key
00058 {
00059 public:
00060 bool operator<(const Key& iOther) const;
00061
00062 uint64 fID;
00063 const ZTupleValue* fValues[kMaxProperties];
00064 size_t fPropCount;
00065 };
00066
00067 bool pSetupIterators(std::vector<const ZTBSpec::Criterion*>& oUncheckedCriteria,
00068 std::set<Key>::const_iterator& oLowerBound, std::set<Key>::const_iterator& oUpperBound);
00069
00070 size_t pCanHandle(const ZTBSpec::CriterionSect& iCriterionSect, bool& oConsistent);
00071
00072 bool pKeyFromTuple(uint64 iID, const ZTuple* iTuple, Key& oKey);
00073
00074 ZTuplePropName fPropNames[kMaxProperties];
00075 size_t fPropNameCount;
00076 std::set<Key> fSet;
00077 };
00078
00079
00080 #pragma mark -
00081 #pragma mark * ZTupleIndexFactory_General
00082
00083 class ZTupleIndexFactory_General : public ZTupleIndexFactory
00084 {
00085 public:
00086 ZTupleIndexFactory_General(const std::vector<std::string>& iPropNames);
00087 virtual ZTupleIndex* Make();
00088
00089 private:
00090 std::string fPropNames[ZTupleIndex_General::kMaxProperties];
00091 size_t fPropNameCount;
00092 };
00093
00094 #endif // __ZTupleIndex_General__