Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix several warnings #15

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions lmdb-safe.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ static string MDBError(int rc)
return mdb_strerror(rc);
}

MDBDbi::MDBDbi(MDB_env* env, MDB_txn* txn, const string_view dbname, int flags)
MDBDbi::MDBDbi(MDB_env* env, MDB_txn* txn, const string_view dbname, unsigned int flags)
{
(void)env;
// A transaction that uses this function must finish (either commit or abort) before any other transaction in the process may use this function.

int rc = mdb_dbi_open(txn, dbname.empty() ? 0 : &dbname[0], flags, &d_dbi);
Expand All @@ -24,7 +25,7 @@ MDBDbi::MDBDbi(MDB_env* env, MDB_txn* txn, const string_view dbname, int flags)
// Database names are keys in the unnamed database, and may be read but not written.
}

MDBEnv::MDBEnv(const char* fname, int flags, int mode)
MDBEnv::MDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode)
{
mdb_env_create(&d_env);
if(mdb_env_set_mapsize(d_env, 16ULL*4096*244140ULL)) // 4GB
Expand Down Expand Up @@ -79,12 +80,12 @@ int MDBEnv::getROTX()
}


std::shared_ptr<MDBEnv> getMDBEnv(const char* fname, int flags, int mode)
std::shared_ptr<MDBEnv> getMDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode)
{
struct Value
{
weak_ptr<MDBEnv> wp;
int flags;
unsigned int flags;
};

static std::map<tuple<dev_t, ino_t>, Value> s_envs;
Expand Down Expand Up @@ -128,7 +129,7 @@ std::shared_ptr<MDBEnv> getMDBEnv(const char* fname, int flags, int mode)
}


MDBDbi MDBEnv::openDB(const string_view dbname, int flags)
MDBDbi MDBEnv::openDB(const string_view dbname, unsigned int flags)
{
unsigned int envflags;
mdb_env_get_flags(d_env, &envflags);
Expand Down Expand Up @@ -159,7 +160,7 @@ MDBRWTransactionImpl::MDBRWTransactionImpl(MDBEnv *parent, MDB_txn *txn):

}

MDB_txn *MDBRWTransactionImpl::openRWTransaction(MDBEnv *env, MDB_txn *parent, int flags)
MDB_txn *MDBRWTransactionImpl::openRWTransaction(MDBEnv *env, MDB_txn *parent, unsigned int flags)
{
MDB_txn *result;
if(env->getROTX() || env->getRWTX())
Expand All @@ -181,14 +182,14 @@ MDB_txn *MDBRWTransactionImpl::openRWTransaction(MDBEnv *env, MDB_txn *parent, i
return result;
}

MDBRWTransactionImpl::MDBRWTransactionImpl(MDBEnv* parent, int flags):
MDBRWTransactionImpl::MDBRWTransactionImpl(MDBEnv* parent, unsigned int flags):
MDBRWTransactionImpl(parent, openRWTransaction(parent, nullptr, flags))
{
}

MDBRWTransactionImpl::~MDBRWTransactionImpl()
{
abort();
MDBRWTransactionImpl::abort();
}

void MDBRWTransactionImpl::commit()
Expand Down Expand Up @@ -226,7 +227,7 @@ MDBROTransactionImpl::MDBROTransactionImpl(MDBEnv *parent, MDB_txn *txn):

}

MDB_txn *MDBROTransactionImpl::openROTransaction(MDBEnv *env, MDB_txn *parent, int flags)
MDB_txn *MDBROTransactionImpl::openROTransaction(MDBEnv *env, MDB_txn *parent, unsigned int flags)
{
if(env->getRWTX())
throw std::runtime_error("Duplicate RO transaction");
Expand Down Expand Up @@ -262,7 +263,7 @@ void MDBROTransactionImpl::closeROCursors()
}
}

MDBROTransactionImpl::MDBROTransactionImpl(MDBEnv *parent, int flags):
MDBROTransactionImpl::MDBROTransactionImpl(MDBEnv *parent, unsigned int flags):
MDBROTransactionImpl(parent, openROTransaction(parent, nullptr, flags))
{

Expand All @@ -271,7 +272,7 @@ MDBROTransactionImpl::MDBROTransactionImpl(MDBEnv *parent, int flags):
MDBROTransactionImpl::~MDBROTransactionImpl()
{
// this is safe because C++ will not call overrides of virtual methods in destructors.
commit();
MDBROTransactionImpl::commit();
}

void MDBROTransactionImpl::abort()
Expand Down Expand Up @@ -333,7 +334,7 @@ MDBRWTransaction MDBRWTransactionImpl::getRWTransaction()

MDBROTransaction MDBRWTransactionImpl::getROTransaction()
{
return std::move(getRWTransaction());
return getRWTransaction();
}

MDBROTransaction MDBEnv::getROTransaction()
Expand Down
45 changes: 23 additions & 22 deletions lmdb-safe.hh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <mutex>
#include <vector>
#include <algorithm>
#include <limits>

// apple compiler somehow has string_view even in c++11!
#if __cplusplus < 201703L && !defined(__APPLE__)
Expand Down Expand Up @@ -47,9 +48,9 @@ class MDBDbi
public:
MDBDbi()
{
d_dbi = -1;
d_dbi = std::numeric_limits<decltype (d_dbi)>::max();
}
explicit MDBDbi(MDB_env* env, MDB_txn* txn, string_view dbname, int flags);
explicit MDBDbi(MDB_env* env, MDB_txn* txn, string_view dbname, unsigned int flags);

operator const MDB_dbi&() const
{
Expand All @@ -68,7 +69,7 @@ using MDBRWTransaction = std::unique_ptr<MDBRWTransactionImpl>;
class MDBEnv
{
public:
MDBEnv(const char* fname, int flags, int mode);
MDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode);

~MDBEnv()
{
Expand All @@ -77,7 +78,7 @@ public:
// but, elsewhere, docs say database handles do not need to be closed?
}

MDBDbi openDB(const string_view dbname, int flags);
MDBDbi openDB(const string_view dbname, unsigned int flags);

MDBRWTransaction getRWTransaction();
MDBROTransaction getROTransaction();
Expand All @@ -101,7 +102,7 @@ private:
std::map<std::thread::id, int> d_ROtransactionsOut;
};

std::shared_ptr<MDBEnv> getMDBEnv(const char* fname, int flags, int mode);
std::shared_ptr<MDBEnv> getMDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode);



Expand Down Expand Up @@ -155,12 +156,12 @@ struct MDBOutVal

template<> inline std::string MDBOutVal::get<std::string>() const
{
return std::string((char*)d_mdbval.mv_data, d_mdbval.mv_size);
return std::string(static_cast<char*>(d_mdbval.mv_data), d_mdbval.mv_size);
}

template<> inline string_view MDBOutVal::get<string_view>() const
{
return string_view((char*)d_mdbval.mv_data, d_mdbval.mv_size);
return string_view(static_cast<char*>(d_mdbval.mv_data), d_mdbval.mv_size);
}

class MDBInVal
Expand All @@ -184,19 +185,19 @@ public:
MDBInVal(const char* s)
{
d_mdbval.mv_size = strlen(s);
d_mdbval.mv_data = (void*)s;
d_mdbval.mv_data = static_cast<void*>(const_cast<char*>(s));
}

MDBInVal(const string_view& v)
{
d_mdbval.mv_size = v.size();
d_mdbval.mv_data = (void*)&v[0];
d_mdbval.mv_data = static_cast<void*>(const_cast<char*>(v.data()));
}

MDBInVal(const std::string& v)
{
d_mdbval.mv_size = v.size();
d_mdbval.mv_data = (void*)&v[0];
d_mdbval.mv_data = static_cast<void*>(const_cast<char*>(v.data()));
}


Expand All @@ -205,7 +206,7 @@ public:
{
MDBInVal ret;
ret.d_mdbval.mv_size = sizeof(T);
ret.d_mdbval.mv_data = (void*)&t;
ret.d_mdbval.mv_data = static_cast<void*>(const_cast<char*>(&t[0]));
return ret;
}

Expand All @@ -231,7 +232,7 @@ protected:
MDBROTransactionImpl(MDBEnv *parent, MDB_txn *txn);

private:
static MDB_txn *openROTransaction(MDBEnv *env, MDB_txn *parent, int flags=0);
static MDB_txn *openROTransaction(MDBEnv *env, MDB_txn *parent, unsigned int flags=0);

MDBEnv* d_parent;
std::vector<MDBROCursor*> d_cursors;
Expand All @@ -242,7 +243,7 @@ protected:
void closeROCursors();

public:
explicit MDBROTransactionImpl(MDBEnv* parent, int flags=0);
explicit MDBROTransactionImpl(MDBEnv* parent, unsigned int flags=0);

MDBROTransactionImpl(const MDBROTransactionImpl& src) = delete;
MDBROTransactionImpl &operator=(const MDBROTransactionImpl& src) = delete;
Expand Down Expand Up @@ -280,7 +281,7 @@ public:


// this is something you can do, readonly
MDBDbi openDB(string_view dbname, int flags)
MDBDbi openDB(string_view dbname, unsigned int flags)
{
return MDBDbi( d_parent->d_env, d_txn, dbname, flags);
}
Expand Down Expand Up @@ -494,7 +495,7 @@ protected:
MDBRWTransactionImpl(MDBEnv* parent, MDB_txn* txn);

private:
static MDB_txn *openRWTransaction(MDBEnv* env, MDB_txn *parent, int flags);
static MDB_txn *openRWTransaction(MDBEnv* env, MDB_txn *parent, unsigned int flags);

private:
std::vector<MDBRWCursor*> d_rw_cursors;
Expand All @@ -506,7 +507,7 @@ private:
}

public:
explicit MDBRWTransactionImpl(MDBEnv* parent, int flags=0);
explicit MDBRWTransactionImpl(MDBEnv* parent, unsigned int flags=0);

MDBRWTransactionImpl(const MDBRWTransactionImpl& rhs) = delete;
MDBRWTransactionImpl(MDBRWTransactionImpl&& rhs) = delete;
Expand All @@ -520,7 +521,7 @@ public:

void clear(MDB_dbi dbi);

void put(MDB_dbi dbi, const MDBInVal& key, const MDBInVal& val, int flags=0)
void put(MDB_dbi dbi, const MDBInVal& key, const MDBInVal& val, unsigned int flags=0)
{
if(!d_txn)
throw std::runtime_error("Attempt to use a closed RW transaction for put");
Expand All @@ -535,7 +536,7 @@ public:
int del(MDBDbi& dbi, const MDBInVal& key, const MDBInVal& val)
{
int rc;
rc=mdb_del(d_txn, dbi, (MDB_val*)&key.d_mdbval, (MDB_val*)&val.d_mdbval);
rc=mdb_del(d_txn, dbi, const_cast<MDB_val*>(&key.d_mdbval), const_cast<MDB_val*>(&val.d_mdbval));
if(rc && rc != MDB_NOTFOUND)
throw std::runtime_error("deleting data: " + std::string(mdb_strerror(rc)));
return rc;
Expand All @@ -544,7 +545,7 @@ public:
int del(MDBDbi& dbi, const MDBInVal& key)
{
int rc;
rc=mdb_del(d_txn, dbi, (MDB_val*)&key.d_mdbval, 0);
rc=mdb_del(d_txn, dbi, const_cast<MDB_val*>(&key.d_mdbval), 0);
if(rc && rc != MDB_NOTFOUND)
throw std::runtime_error("deleting data: " + std::string(mdb_strerror(rc)));
return rc;
Expand Down Expand Up @@ -572,7 +573,7 @@ public:
return rc;
}

MDBDbi openDB(string_view dbname, int flags)
MDBDbi openDB(string_view dbname, unsigned int flags)
{
return MDBDbi(environment().d_env, d_txn, dbname, flags);
}
Expand Down Expand Up @@ -608,15 +609,15 @@ public:
}


int put(const MDBOutVal& key, const MDBOutVal& data, int flags=0)
int put(const MDBOutVal& key, const MDBOutVal& data, unsigned int flags=0)
{
// XXX check errors
return mdb_cursor_put(*this,
const_cast<MDB_val*>(&key.d_mdbval),
const_cast<MDB_val*>(&data.d_mdbval), flags);
}

int del(int flags=0)
int del(unsigned int flags=0)
{
return mdb_cursor_del(*this, flags);
}
Expand Down
Loading