1
0
Fork 0
forked from blue/lmdbal

Cursors refactoring part one

This commit is contained in:
Blue 2024-12-25 19:19:32 +02:00
parent ef86d0adf9
commit bfb1d007ad
Signed by untrusted user: blue
GPG key ID: 9B203B252A63EE38
19 changed files with 824 additions and 677 deletions

90
src/cursorcommon.h Normal file
View file

@ -0,0 +1,90 @@
/*
* LMDB Abstraction Layer.
* Copyright (C) 2023 Yury Gubich <blue@macaw.me>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <stdint.h>
#include <string>
#include <lmdb.h>
namespace LMDBAL {
class Transaction;
class StorageCommon;
class CursorCommon {
friend class Transaction;
protected:
enum State { /**<Cursor state:*/
closed, /**< - closed*/
openedPublic, /**< - opened with public transaction, all storages will be notified about it after it's done*/
openedPrivate /**< - opened with private transaction, only current storage will be notified when cursor is closed*/
};
protected:
CursorCommon();
CursorCommon(StorageCommon* storage);
CursorCommon(const CursorCommon& other) = delete;
CursorCommon(CursorCommon&& other);
virtual ~CursorCommon() noexcept;
CursorCommon& operator = (const CursorCommon& other) = delete;
CursorCommon& operator = (CursorCommon&& other);
public:
void open();
void open(const Transaction& transaction);
void renew();
void renew(const Transaction& transaction);
bool opened() const;
bool empty() const;
void close();
protected:
void terminated();
void dropped();
void reset();
protected:
uint32_t id;
State state;
MDB_cursor* handle;
StorageCommon* storage;
private:
inline static const std::string openCursorMethodName = "Cursor::open"; /**<\brief member function name, just for exceptions*/
inline static const std::string closeCursorMethodName = "Cursor::close"; /**<\brief member function name, just for exceptions*/
inline static const std::string renewCursorMethodName = "Cursor::renew"; /**<\brief member function name, just for exceptions*/
protected:
inline static const std::string firstMethodName = "first"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string lastMethodName = "last"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string nextMethodName = "next"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string prevMethodName = "prev"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string currentMethodName = "current"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string setMethodName = "set"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string firstOperationName = "Cursor::first"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string lastOperationName = "Cursor::last"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string nextOperationName = "Cursor::next"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string prevOperationName = "Cursor::prev"; /**<\brief member function name, just for exceptions in heir*/
inline static const std::string currentOperationName = "Cursor::current"; /**<\brief member function name, just for exceptions in heir*/
};
}