summaryrefslogtreecommitdiff
path: root/cpp/src/Freeze/EvictorI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Freeze/EvictorI.h')
-rw-r--r--cpp/src/Freeze/EvictorI.h80
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