summaryrefslogtreecommitdiff
path: root/cpp/src/Freeze/MapI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Freeze/MapI.h')
-rw-r--r--cpp/src/Freeze/MapI.h47
1 files changed, 29 insertions, 18 deletions
diff --git a/cpp/src/Freeze/MapI.h b/cpp/src/Freeze/MapI.h
index 0e3054751e8..2d3898dec0b 100644
--- a/cpp/src/Freeze/MapI.h
+++ b/cpp/src/Freeze/MapI.h
@@ -16,7 +16,7 @@
#define FREEZE_MAP_I_H
#include <Freeze/Map.h>
-#include <Freeze/SharedDbEnv.h>
+#include <Freeze/SharedDb.h>
namespace Freeze
{
@@ -62,9 +62,8 @@ public:
virtual bool
equals(const DBIteratorHelper&) const;
- virtual const Ice::CommunicatorPtr&
- getCommunicator() const;
-
+ void
+ close();
class Tx : public IceUtil::SimpleShared
{
@@ -88,8 +87,15 @@ public:
typedef IceUtil::Handle<Tx> TxPtr;
+ const TxPtr&
+ tx() const;
+
private:
+ void
+ cleanup();
+
+
const DBMapHelperI& _map;
Dbc* _dbc;
TxPtr _tx;
@@ -99,17 +105,11 @@ private:
};
-
class DBMapHelperI : public DBMapHelper
{
public:
- DBMapHelperI(const Ice::CommunicatorPtr& communicator,
- const std::string& envName, const std::string& dbName,
- bool createDb);
-
- DBMapHelperI(const Ice::CommunicatorPtr& communicator,
- DbEnv& dbEnv, const std::string& dbName,
+ DBMapHelperI(const ConnectionIPtr& connection, const std::string& dbName,
bool createDb);
virtual ~DBMapHelperI();
@@ -135,22 +135,33 @@ public:
virtual size_t
size() const;
+ virtual void
+ closeAllIterators();
+
+ void
+ close();
+
private:
- void
- openDb(bool);
+ virtual void
+ closeAllIteratorsExcept(const DBIteratorHelperI::TxPtr&) const;
+
friend class DBIteratorHelperI;
friend class DBIteratorHelperI::Tx;
- int _trace;
- DbEnv* _dbEnv;
- SharedDbEnvPtr _dbEnvHolder;
- std::auto_ptr<Db> _db;
+ const ConnectionIPtr _connection;
+ mutable std::list<DBIteratorHelperI*> _iteratorList;
+ SharedDbPtr _db;
const std::string _dbName;
+ int _trace;
};
-
+inline const DBIteratorHelperI::TxPtr&
+DBIteratorHelperI::tx() const
+{
+ return _tx;
+}
}