From c375b1c69665ae7c16ffa3f17264386dfc257d8e Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sat, 9 May 2026 23:03:00 -0300 Subject: FOL VM with cursor mocked storage --- src/CursorManager.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/CursorManager.cpp') diff --git a/src/CursorManager.cpp b/src/CursorManager.cpp index 8ae4496..f80ac54 100644 --- a/src/CursorManager.cpp +++ b/src/CursorManager.cpp @@ -1,5 +1,50 @@ #include "CursorManager.h" +#include + namespace nt { + static std::string JoinPath(const std::vector& path) + { + return std::accumulate( + std::next(path.begin()), path.end(), path.front(), + [](std::string a, const std::string& b) { return std::move(a) + "/" + b; }); + } + + CursorManager::cursor* CursorManager::Open(HandlerManager::handle* handle) + { + if (handle == nullptr || handle->object == nullptr) + return nullptr; + + if (handle->object->head->type->label != RELATION) + return nullptr; + + const std::string key = JoinPath(handle->object->head->path); + auto it = mock_store_.find(key); + if (it == mock_store_.end()) + return nullptr; + + auto* c = new cursor(); + c->handle = handle; + for (const auto& row : it->second) + c->tuples.emplace_back(row); + return c; + } + + Tuple* CursorManager::Next(cursor* cursor) + { + if (cursor == nullptr || cursor->position >= cursor->tuples.size()) + return nullptr; + return &cursor->tuples[cursor->position++]; + } + + void CursorManager::Close(cursor* cursor) + { + delete cursor; + } + + void CursorManager::MockInsert(std::vector path, std::vector tuple) + { + mock_store_[JoinPath(path)].push_back(std::move(tuple)); + } } -- cgit v1.2.3