Fix several warnings
* Avoid implicit signedness conversions where possible * Avoid c-style casts
This commit is contained in:
parent
469de3c0e2
commit
b621c27ad4
21
lmdb-safe.cc
21
lmdb-safe.cc
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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())
|
||||
|
@ -181,7 +182,7 @@ 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))
|
||||
{
|
||||
}
|
||||
|
@ -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");
|
||||
|
@ -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))
|
||||
{
|
||||
|
||||
|
@ -333,7 +334,7 @@ MDBRWTransaction MDBRWTransactionImpl::getRWTransaction()
|
|||
|
||||
MDBROTransaction MDBRWTransactionImpl::getROTransaction()
|
||||
{
|
||||
return std::move(getRWTransaction());
|
||||
return getRWTransaction();
|
||||
}
|
||||
|
||||
MDBROTransaction MDBEnv::getROTransaction()
|
||||
|
|
45
lmdb-safe.hh
45
lmdb-safe.hh
|
@ -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__)
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -608,7 +609,7 @@ 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,
|
||||
|
@ -616,7 +617,7 @@ public:
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ inline std::string keyConv(const T& t);
|
|||
template <class T, typename std::enable_if<std::is_arithmetic<T>::value,T>::type* = nullptr>
|
||||
inline std::string keyConv(const T& t)
|
||||
{
|
||||
return std::string((char*)&t, sizeof(t));
|
||||
return std::string(reinterpret_cast<const char *>(&t), sizeof(t));
|
||||
}
|
||||
|
||||
// this is how to override specific types.. it is ugly
|
||||
|
@ -99,7 +99,7 @@ template<class Class,typename Type, typename Parent>
|
|||
struct LMDBIndexOps
|
||||
{
|
||||
explicit LMDBIndexOps(Parent* parent) : d_parent(parent){}
|
||||
void put(MDBRWTransaction& txn, const Class& t, uint32_t id, int flags=0)
|
||||
void put(MDBRWTransaction& txn, const Class& t, uint32_t id, unsigned int flags=0)
|
||||
{
|
||||
txn->put(d_idx, keyConv(d_parent->getMember(t)), id, flags);
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ struct LMDBIndexOps
|
|||
}
|
||||
}
|
||||
|
||||
void openDB(std::shared_ptr<MDBEnv>& env, string_view str, int flags)
|
||||
void openDB(std::shared_ptr<MDBEnv>& env, string_view str, unsigned int flags)
|
||||
{
|
||||
d_idx = env->openDB(str, flags);
|
||||
}
|
||||
|
@ -153,15 +153,26 @@ struct index_on_function : LMDBIndexOps<Class, Type, index_on_function<Class, Ty
|
|||
struct nullindex_t
|
||||
{
|
||||
template<typename Class>
|
||||
void put(MDBRWTransaction& txn, const Class& t, uint32_t id, int flags=0)
|
||||
{}
|
||||
void put(MDBRWTransaction& txn, const Class& t, uint32_t id, unsigned int flags=0)
|
||||
{
|
||||
(void)txn;
|
||||
(void)t;
|
||||
(void)id;
|
||||
(void)flags;
|
||||
}
|
||||
template<typename Class>
|
||||
void del(MDBRWTransaction& txn, const Class& t, uint32_t id)
|
||||
{}
|
||||
|
||||
void openDB(std::shared_ptr<MDBEnv>& env, string_view str, int flags)
|
||||
{
|
||||
|
||||
(void)txn;
|
||||
(void)t;
|
||||
(void)id;
|
||||
}
|
||||
|
||||
void openDB(std::shared_ptr<MDBEnv>& env, string_view str, unsigned int flags)
|
||||
{
|
||||
(void)env;
|
||||
(void)str;
|
||||
(void)flags;
|
||||
}
|
||||
typedef uint32_t type; // dummy
|
||||
};
|
||||
|
@ -202,7 +213,7 @@ public:
|
|||
{}
|
||||
|
||||
//! Number of entries in main database
|
||||
uint32_t size()
|
||||
size_t size()
|
||||
{
|
||||
MDB_stat stat;
|
||||
mdb_stat(**d_parent.d_txn, d_parent.d_parent->d_main, &stat);
|
||||
|
@ -211,7 +222,7 @@ public:
|
|||
|
||||
//! Number of entries in the various indexes - should be the same
|
||||
template<int N>
|
||||
uint32_t size()
|
||||
size_t size()
|
||||
{
|
||||
MDB_stat stat;
|
||||
mdb_stat(**d_parent.d_txn, std::get<N>(d_parent.d_parent->d_tuple).d_idx, &stat);
|
||||
|
@ -230,7 +241,7 @@ public:
|
|||
}
|
||||
|
||||
//! Get item through index N, then via the main database
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
uint32_t get(const typename std::tuple_element<N, tuple_t>::type::type& key, T& out)
|
||||
{
|
||||
MDBOutVal id;
|
||||
|
@ -242,7 +253,7 @@ public:
|
|||
}
|
||||
|
||||
//! Cardinality of index N
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
uint32_t cardinality()
|
||||
{
|
||||
auto cursor = (*d_parent.d_txn)->getCursor(std::get<N>(d_parent.d_parent->d_tuple).d_idx);
|
||||
|
@ -324,12 +335,12 @@ public:
|
|||
d_cursor.del();
|
||||
}
|
||||
|
||||
bool operator!=(const eiter_t& rhs) const
|
||||
bool operator!=(const eiter_t&) const
|
||||
{
|
||||
return !d_end;
|
||||
}
|
||||
|
||||
bool operator==(const eiter_t& rhs) const
|
||||
bool operator==(const eiter_t&) const
|
||||
{
|
||||
return d_end;
|
||||
}
|
||||
|
@ -463,7 +474,7 @@ public:
|
|||
}
|
||||
|
||||
// basis for find, lower_bound
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
iter_t genfind(const typename std::tuple_element<N, tuple_t>::type::type& key, MDB_cursor_op op)
|
||||
{
|
||||
typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get<N>(d_parent.d_parent->d_tuple).d_idx);
|
||||
|
@ -481,13 +492,13 @@ public:
|
|||
return iter_t{&d_parent, std::move(cursor), true, false};
|
||||
};
|
||||
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
iter_t find(const typename std::tuple_element<N, tuple_t>::type::type& key)
|
||||
{
|
||||
return genfind<N>(key, MDB_SET);
|
||||
}
|
||||
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
iter_t lower_bound(const typename std::tuple_element<N, tuple_t>::type::type& key)
|
||||
{
|
||||
return genfind<N>(key, MDB_SET_RANGE);
|
||||
|
@ -495,7 +506,7 @@ public:
|
|||
|
||||
|
||||
//! equal range - could possibly be expressed through genfind
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
std::pair<iter_t,eiter_t> equal_range(const typename std::tuple_element<N, tuple_t>::type::type& key)
|
||||
{
|
||||
typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get<N>(d_parent.d_parent->d_tuple).d_idx);
|
||||
|
@ -514,7 +525,7 @@ public:
|
|||
};
|
||||
|
||||
//! equal range - could possibly be expressed through genfind
|
||||
template<int N>
|
||||
template<std::size_t N>
|
||||
std::pair<iter_t,eiter_t> prefix_range(const typename std::tuple_element<N, tuple_t>::type::type& key)
|
||||
{
|
||||
typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get<N>(d_parent.d_parent->d_tuple).d_idx);
|
||||
|
@ -590,7 +601,7 @@ public:
|
|||
// insert something, with possibly a specific id
|
||||
uint32_t put(const T& t, uint32_t id=0)
|
||||
{
|
||||
int flags = 0;
|
||||
unsigned int flags = 0;
|
||||
if(!id) {
|
||||
id = MDBGetMaxID(*d_txn, d_parent->d_main) + 1;
|
||||
flags = MDB_APPEND;
|
||||
|
|
Loading…
Reference in New Issue