diff options
Diffstat (limited to 'cpp/src/Freeze/Util.h')
-rw-r--r-- | cpp/src/Freeze/Util.h | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/cpp/src/Freeze/Util.h b/cpp/src/Freeze/Util.h index c5b243c1715..ef3deed6399 100644 --- a/cpp/src/Freeze/Util.h +++ b/cpp/src/Freeze/Util.h @@ -25,7 +25,7 @@ namespace Freeze { -inline void +inline void initializeInDbt(const std::vector<Ice::Byte>& v, Dbt& dbt) { dbt.set_data(const_cast<Ice::Byte*>(&v[0])); @@ -36,7 +36,18 @@ initializeInDbt(const std::vector<Ice::Byte>& v, Dbt& dbt) dbt.set_flags(DB_DBT_USERMEM); } -inline void +inline void +initializeInDbt(IceInternal::BasicStream& s, Dbt& dbt) +{ + dbt.set_data(const_cast<Ice::Byte*>(s.b.begin())); + dbt.set_size(static_cast<u_int32_t>(s.b.size())); + dbt.set_ulen(0); + dbt.set_dlen(0); + dbt.set_doff(0); + dbt.set_flags(DB_DBT_USERMEM); +} + +inline void initializeOutDbt(std::vector<Ice::Byte>& v, Dbt& dbt) { v.resize(v.capacity()); @@ -48,11 +59,22 @@ initializeOutDbt(std::vector<Ice::Byte>& v, Dbt& dbt) dbt.set_flags(DB_DBT_USERMEM); } +inline void +initializeOutDbt(IceInternal::BasicStream& s, Dbt& dbt) +{ + dbt.set_data(const_cast<Ice::Byte*>(s.b.begin())); + dbt.set_size(0); + dbt.set_ulen(static_cast<u_int32_t>(s.b.size())); + dbt.set_dlen(0); + dbt.set_doff(0); + dbt.set_flags(DB_DBT_USERMEM); +} + // -// Handles a Berkeley DB DbException by resizing the +// Handles a Berkeley DB DbException by resizing the // given key/value/dbt (when the exception's errno is -// DB_SMALL_BUFFER) or by throwing a +// DB_SMALL_BUFFER) or by throwing a // Freeze::DatabaseException // @@ -60,11 +82,11 @@ void handleDbException(const DbException&, const char*, int); void -handleDbException(const DbException&, Key&, Dbt&, +handleDbException(const DbException&, Key&, Dbt&, const char*, int); void -handleDbException(const DbException&, Key&, Dbt&, Value&, Dbt&, +handleDbException(const DbException&, Key&, Dbt&, Value&, Dbt&, const char*, int); } |