some thoughts about cursors, nothing special yet

This commit is contained in:
Blue 2023-08-07 18:27:44 -03:00
parent 69bf1fcc3d
commit 5fba60f7f0
Signed by: blue
GPG key ID: 9B203B252A63EE38
4 changed files with 144 additions and 11 deletions

View file

@ -19,6 +19,9 @@
#ifndef LMDBAL_CURSOR_H
#define LMDBAL_CURSOR_H
#include <string>
#include "lmdb.h"
#include "base.h"
#include "storage.h"
@ -28,18 +31,45 @@ template <class K, class V>
class Cursor {
friend class Storage<K, V>;
private:
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*/
};
Cursor(Storage<K, V>* parent);
~Cursor();
public:
void open();
void close();
void open() const;
void open(TransactionID txn) const;
void renew() const;
void renew(TransactionID txn) const;
void close() const;
std::pair<K, V> first() const;
std::pair<K, V> last() const;
std::pair<K, V> next() const;
std::pair<K, V> prev() const;
std::pair<K, V> current() const;
void first(std::pair<K, V>& out) const;
void last(std::pair<K, V>& out) const;
void next(std::pair<K, V>& out) const;
void prev(std::pair<K, V>& out) const;
void current(std::pair<K, V>& out) const;
private:
void terminated();
void terminated() const;
private:
Storage<K, V>* storage;
mutable MDB_cursor* cursor;
mutable State state;
inline static const std::string openRecordMethodName = "Cursor::open"; /**<\brief member function name, just for exceptions*/
inline static const std::string closeRecordMethodName = "Cursor::close"; /**<\brief member function name, just for exceptions*/
inline static const std::string renewRecordMethodName = "Cursor::renew"; /**<\brief member function name, just for exceptions*/
};
};