/* * LMDB Abstraction Layer. * Copyright (C) 2023 Yury Gubich * * 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 . */ #ifndef LMDBAL_CURSOR_H #define LMDBAL_CURSOR_H #include #include "lmdb.h" #include "base.h" #include "storage.h" namespace LMDBAL { template class Cursor { friend class Storage; private: enum State { /*** parent); ~Cursor(); public: void open() const; void open(TransactionID txn) const; void renew() const; void renew(TransactionID txn) const; void close() const; std::pair first() const; std::pair last() const; std::pair next() const; std::pair prev() const; std::pair current() const; void first(std::pair& out) const; void last(std::pair& out) const; void next(std::pair& out) const; void prev(std::pair& out) const; void current(std::pair& out) const; private: void terminated() const; private: Storage* 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*/ }; }; #include "cursor.hpp" #endif //LMDBAL_CURSOR_H