From b621c27ad46e39d74f860714556ee9835bf3f9a8 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sun, 5 Dec 2021 19:28:08 +0100 Subject: [PATCH] Fix several warnings * Avoid implicit signedness conversions where possible * Avoid c-style casts --- lmdb-safe.cc | 21 ++++++++++---------- lmdb-safe.hh | 45 ++++++++++++++++++++++--------------------- lmdb-typed.hh | 53 +++++++++++++++++++++++++++++++-------------------- 3 files changed, 66 insertions(+), 53 deletions(-) diff --git a/lmdb-safe.cc b/lmdb-safe.cc index 7397cd3..a9e5ecc 100644 --- a/lmdb-safe.cc +++ b/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 getMDBEnv(const char* fname, int flags, int mode) +std::shared_ptr getMDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode) { struct Value { weak_ptr wp; - int flags; + unsigned int flags; }; static std::map, Value> s_envs; @@ -128,7 +129,7 @@ std::shared_ptr 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() diff --git a/lmdb-safe.hh b/lmdb-safe.hh index 5185807..06d350e 100644 --- a/lmdb-safe.hh +++ b/lmdb-safe.hh @@ -11,6 +11,7 @@ #include #include #include +#include // 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::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; 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 d_ROtransactionsOut; }; -std::shared_ptr getMDBEnv(const char* fname, int flags, int mode); +std::shared_ptr getMDBEnv(const char* fname, unsigned int flags, mdb_mode_t mode); @@ -155,12 +156,12 @@ struct MDBOutVal template<> inline std::string MDBOutVal::get() const { - return std::string((char*)d_mdbval.mv_data, d_mdbval.mv_size); + return std::string(static_cast(d_mdbval.mv_data), d_mdbval.mv_size); } template<> inline string_view MDBOutVal::get() const { - return string_view((char*)d_mdbval.mv_data, d_mdbval.mv_size); + return string_view(static_cast(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(const_cast(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(const_cast(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(const_cast(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(const_cast(&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 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 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(&key.d_mdbval), const_cast(&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(&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(&data.d_mdbval), flags); } - int del(int flags=0) + int del(unsigned int flags=0) { return mdb_cursor_del(*this, flags); } diff --git a/lmdb-typed.hh b/lmdb-typed.hh index b573841..a205b89 100644 --- a/lmdb-typed.hh +++ b/lmdb-typed.hh @@ -74,7 +74,7 @@ inline std::string keyConv(const T& t); template ::value,T>::type* = nullptr> inline std::string keyConv(const T& t) { - return std::string((char*)&t, sizeof(t)); + return std::string(reinterpret_cast(&t), sizeof(t)); } // this is how to override specific types.. it is ugly @@ -99,7 +99,7 @@ template 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& env, string_view str, int flags) + void openDB(std::shared_ptr& env, string_view str, unsigned int flags) { d_idx = env->openDB(str, flags); } @@ -153,15 +153,26 @@ struct index_on_function : LMDBIndexOps - 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 void del(MDBRWTransaction& txn, const Class& t, uint32_t id) - {} - - void openDB(std::shared_ptr& env, string_view str, int flags) { - + (void)txn; + (void)t; + (void)id; + } + + void openDB(std::shared_ptr& 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 - uint32_t size() + size_t size() { MDB_stat stat; mdb_stat(**d_parent.d_txn, std::get(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 + template uint32_t get(const typename std::tuple_element::type::type& key, T& out) { MDBOutVal id; @@ -242,7 +253,7 @@ public: } //! Cardinality of index N - template + template uint32_t cardinality() { auto cursor = (*d_parent.d_txn)->getCursor(std::get(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 + template iter_t genfind(const typename std::tuple_element::type::type& key, MDB_cursor_op op) { typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get(d_parent.d_parent->d_tuple).d_idx); @@ -481,13 +492,13 @@ public: return iter_t{&d_parent, std::move(cursor), true, false}; }; - template + template iter_t find(const typename std::tuple_element::type::type& key) { return genfind(key, MDB_SET); } - template + template iter_t lower_bound(const typename std::tuple_element::type::type& key) { return genfind(key, MDB_SET_RANGE); @@ -495,7 +506,7 @@ public: //! equal range - could possibly be expressed through genfind - template + template std::pair equal_range(const typename std::tuple_element::type::type& key) { typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get(d_parent.d_parent->d_tuple).d_idx); @@ -514,7 +525,7 @@ public: }; //! equal range - could possibly be expressed through genfind - template + template std::pair prefix_range(const typename std::tuple_element::type::type& key) { typename Parent::cursor_t cursor = (*d_parent.d_txn)->getCursor(std::get(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;