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 __ZTS_Umbrella__
00026 #define __ZTS_Umbrella__
00027 #include "zconfig.h"
00028
00029 #include "ZTS.h"
00030
00031 #include <map>
00032
00033
00034 #pragma mark -
00035 #pragma mark * ZTS_Umbrella
00036
00037 class ZTS_Umbrella : public ZTS
00038 {
00039 public:
00040 ZTS_Umbrella(const std::vector<ZRef<ZTS> >& iTSes);
00041 virtual ~ZTS_Umbrella();
00042
00043 virtual void AllocateIDs(size_t iCount, uint64& oBaseID, size_t& oCount);
00044 virtual void SetTuples(size_t iCount, const uint64* iIDs, const ZTuple* iTuples);
00045 virtual void GetTuples(size_t iCount, const uint64* iIDs, ZTuple* oTuples);
00046 virtual void Search(const ZTBSpec& iSpec, const std::set<uint64>& iSkipIDs, std::set<uint64>& ioIDs);
00047 virtual ZMutexBase& GetReadLock();
00048 virtual ZMutexBase& GetWriteLock();
00049
00050 private:
00051 typedef std::map<uint64, std::pair<size_t, uint64> > GlobalToLocal_t;
00052 typedef std::map<uint64, uint64> LocalToGlobal_t;
00053 class Child
00054 {
00055 public:
00056 ZRef<ZTS> fTS;
00057 LocalToGlobal_t fLocalToGlobal;
00058 };
00059
00060 uint64 pAllocateID();
00061 uint64 pAllocateID(ZRef<ZTS> iTS);
00062
00063 void pTranslate_GlobalToLocal(size_t iChildIndex, ZTuple& ioTuple);
00064 void pTranslate_LocalToGlobal(size_t iChildIndex, ZTuple& ioTuple);
00065
00066 uint64 pGlobalToLocal(size_t iChildIndex, uint64 iGlobalID);
00067 uint64 pLocalToGlobal(size_t iChildIndex, uint64 iLocalID);
00068
00069 std::vector<Child> fChildren;
00070 GlobalToLocal_t fGlobalToLocal;
00071 ZMutexComposite fReadComposite;
00072 };
00073
00074 #endif // __ZTS_Umbrella__