0.3.0
This commit is contained in:
parent
66df0da5f6
commit
2b4763b575
9 changed files with 141 additions and 49 deletions
|
@ -31,18 +31,27 @@
|
|||
*
|
||||
* You can receive an instance of this class calling LMDBAL::Base::addStorage(const std::string&)
|
||||
* if the database is yet closed and you're defining the storages you're going to need.
|
||||
* Or you can call LMDBAL::Base::getStorage(const std::string&) if the database is opened and you didn't save a pointer to the storage
|
||||
* Or you can call LMDBAL::Base::getStorage(const std::string&) if you didn't save a pointer to the storage at first
|
||||
*
|
||||
* You are not supposed to instantiate or destory instances of this class yourself!
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Creates a storage
|
||||
*
|
||||
* \param[in] _name - name of the new storage
|
||||
* \param[in] parent - parent database pointed (borrowed)
|
||||
*/
|
||||
template<class K, class V>
|
||||
LMDBAL::Storage<K, V>::Storage(const std::string& p_name, Base* parent):
|
||||
iStorage(p_name, parent),
|
||||
LMDBAL::Storage<K, V>::Storage(const std::string& _name, Base* parent):
|
||||
iStorage(_name, parent),
|
||||
keySerializer(new Serializer<K>()),
|
||||
valueSerializer(new Serializer<V>())
|
||||
{}
|
||||
|
||||
/**
|
||||
* \brief Destroys a storage
|
||||
*/
|
||||
template<class K, class V>
|
||||
LMDBAL::Storage<K, V>::~Storage() {
|
||||
delete valueSerializer;
|
||||
|
@ -673,57 +682,92 @@ void LMDBAL::Storage<K, V>::removeRecord(const K& key, TransactionID txn) {
|
|||
}
|
||||
|
||||
/**
|
||||
* \brief A private virtual function I need to open database
|
||||
* \brief A private virtual function I need to open each storage in the database
|
||||
*
|
||||
* This and the following collection of specializations are a way to optimise database using
|
||||
* MDB_INTEGERKEY flag, when the key is actually kind of an integer
|
||||
* This infrastructure also allowes us to customize mdb_dbi_open call in the future
|
||||
* \param[in] transaction - lmdb transaction to call <a class="el" href="http://www.lmdb.tech/doc/group__mdb.html#gac08cad5b096925642ca359a6d6f0562a">mdb_dbi_open</a>
|
||||
* \returns MDB_SUCCESS if everything went smooth or MDB_<error> -like error code
|
||||
*/
|
||||
template<class K, class V>
|
||||
int LMDBAL::Storage<K, V>::createStorage(MDB_txn* transaction) {
|
||||
return makeStorage<K>(transaction);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief A functiion to actually open <a class="el" href="http://www.lmdb.tech/doc/group__mdb.html#gadbe68a06c448dfb62da16443d251a78b">MDB_dbi</a> storage
|
||||
*
|
||||
* \tparam K type of keys in opening storage
|
||||
*
|
||||
* \param[in] transaction - lmdb transaction to call <a class="el" href="http://www.lmdb.tech/doc/group__mdb.html#gac08cad5b096925642ca359a6d6f0562a">mdb_dbi_open</a>, must be a writable transaction!
|
||||
* \returns MDB_SUCCESS if everything went smooth or MDB_<error> -like error code
|
||||
*
|
||||
* This and the following collection of specializations are a way to optimise database using
|
||||
* MDB_INTEGERKEY flag, when the key is actually kind of an integer
|
||||
* This infrastructure also allowes us to customize mdb_dbi_open call in the future
|
||||
*/
|
||||
template<class K>
|
||||
inline int LMDBAL::iStorage::makeStorage(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for uint64_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<uint64_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for uint32_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<uint32_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for uint16_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<uint16_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for uint8_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<uint8_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for int64_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<int64_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for int32_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<int32_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for int16_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<int16_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Opening database function specialization for int8_t
|
||||
*/
|
||||
template<>
|
||||
inline int LMDBAL::iStorage::makeStorage<int8_t>(MDB_txn* transaction) {
|
||||
return mdb_dbi_open(transaction, name.c_str(), MDB_CREATE | MDB_INTEGERKEY, &dbi);
|
||||
|
@ -743,11 +787,27 @@ inline std::string LMDBAL::iStorage::toString(const T& value) {
|
|||
return std::to_string(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief A method to cast a value (which can be a value or a key) to string.
|
||||
*
|
||||
* QString spectialization
|
||||
*
|
||||
* \param[in] value a value that should be converted to string
|
||||
* \returns a string presentation of value
|
||||
*/
|
||||
template<>
|
||||
inline std::string LMDBAL::iStorage::toString(const QString& value) {
|
||||
return value.toStdString();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief A method to cast a value (which can be a value or a key) to string.
|
||||
*
|
||||
* std::string spectialization
|
||||
*
|
||||
* \param[in] value a value that should be converted to string
|
||||
* \returns a string presentation of value
|
||||
*/
|
||||
template<>
|
||||
inline std::string LMDBAL::iStorage::toString(const std::string& value) {
|
||||
return value;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue