diff options
Diffstat (limited to 'cpp/src/Freeze/EvictorI.h')
-rw-r--r-- | cpp/src/Freeze/EvictorI.h | 80 |
1 files changed, 77 insertions, 3 deletions
diff --git a/cpp/src/Freeze/EvictorI.h b/cpp/src/Freeze/EvictorI.h index d8107e0d910..d244405d106 100644 --- a/cpp/src/Freeze/EvictorI.h +++ b/cpp/src/Freeze/EvictorI.h @@ -20,6 +20,7 @@ #include <Freeze/Evictor.h> #include <Freeze/SharedDbEnv.h> #include <Freeze/EvictorStorage.h> +#include <Freeze/Index.h> #include <Freeze/DB.h> #include <list> #include <vector> @@ -33,8 +34,11 @@ class EvictorI : public Evictor, public IceUtil::Monitor<IceUtil::Mutex>, publi { public: - EvictorI(const Ice::CommunicatorPtr, const std::string&, const std::string&, bool); - EvictorI(const Ice::CommunicatorPtr, const std::string&, DbEnv&, const std::string&, bool); + EvictorI(const Ice::CommunicatorPtr, const std::string&, const std::string&, + const std::vector<Freeze::IndexPtr>&, bool); + + EvictorI(const Ice::CommunicatorPtr, const std::string&, DbEnv&, const std::string&, + const std::vector<Freeze::IndexPtr>&, bool); virtual ~EvictorI(); @@ -73,6 +77,12 @@ public: Db* db() const; + DbEnv* + dbEnv() const; + + const std::string& + dbName() const; + int currentGeneration() const; @@ -122,6 +132,24 @@ public: // + // marshaling/unmarshaling functions + // + static void + marshalRoot(const Ice::Identity&, Freeze::Key&, const Ice::CommunicatorPtr&); + + static void + marshal(const Freeze::EvictorStorageKey&, Freeze::Key& bytes, const Ice::CommunicatorPtr&); + + static void + unmarshal(Freeze::EvictorStorageKey&, const Freeze::Key&, const Ice::CommunicatorPtr&); + + static void + marshal(const Freeze::ObjectRecord&, Freeze::Value&, const Ice::CommunicatorPtr&); + + static void + unmarshal(Freeze::ObjectRecord&, const Freeze::Value&, const Ice::CommunicatorPtr&); + + // // Streamed objects // struct StreamedObject @@ -172,9 +200,11 @@ public: #endif + + private: - void init(const std::string& envName, const std::string& dbName, bool createDb); + void init(const std::string& envName, bool createDb); void evict(); bool dbHasObject(const Ice::Identity&); @@ -222,8 +252,14 @@ private: DbEnv* _dbEnv; SharedDbEnvPtr _dbEnvHolder; + + std::string _dbName; + std::auto_ptr<Db> _db; ServantInitializerPtr _initializer; + + std::vector<Freeze::IndexPtr> _indices; + Ice::Int _trace; // @@ -264,6 +300,18 @@ EvictorI::db() const return _db.get(); } +inline DbEnv* +EvictorI::dbEnv() const +{ + return _dbEnv; +} + +inline const std::string& +EvictorI::dbName() const +{ + return _dbName; +} + inline int EvictorI::currentGeneration() const { @@ -271,6 +319,32 @@ EvictorI::currentGeneration() const return _generation; } +inline bool +startWith(const Key& key, const Key& root) +{ + if(root.size() > key.size()) + { + return false; + } + return memcmp(&root[0], &key[0], root.size()) == 0; +} + +inline Ice::Trace& +operator<<(Ice::Trace& os, const std::vector<std::string>& facetPath) +{ + os << '"'; + for(size_t i = 0; i < facetPath.size(); i++) + { + os << facetPath[i]; + if(i != facetPath.size() - 1) + { + os << '.'; + } + } + os << '"'; + return os; +} + } #endif |