Fix several warnings

* Avoid implicit signedness conversions where possible
* Avoid c-style casts
This commit is contained in:
Martchus 2021-12-05 19:28:08 +01:00
parent 469de3c0e2
commit b621c27ad4
3 changed files with 66 additions and 53 deletions

View File

@ -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()

View File

@ -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);
}

View File

@ -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;