From 83c2a3ecd7427baddfdacc813d9d2db0fda0ed62 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Wed, 22 Sep 2021 16:43:09 +0200 Subject: [PATCH] Add ltm/disk/operations.h --- .../RobotAPI/libraries/armem/CMakeLists.txt | 2 + .../armem/server/ltm/disk/operations.cpp | 76 +++++++++++++++++++ .../armem/server/ltm/disk/operations.h | 18 +++++ 3 files changed, 96 insertions(+) create mode 100644 source/RobotAPI/libraries/armem/server/ltm/disk/operations.cpp create mode 100644 source/RobotAPI/libraries/armem/server/ltm/disk/operations.h diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index c524ecd93..cf8ce72df 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -84,6 +84,7 @@ set(LIB_FILES server/RemoteGuiAronDataVisitor.cpp server/ltm/LongtermMemoryBase.cpp + server/ltm/disk/operations.cpp server/ltm/disk/MemoryManager.cpp server/ltm/mongodb/MemoryManager.cpp server/ltm/mongodb/ConnectionManager.cpp @@ -196,6 +197,7 @@ set(LIB_HEADERS server/RemoteGuiAronDataVisitor.h server/ltm/LongtermMemoryBase.h + server/ltm/disk/operations.h server/ltm/disk/MemoryManager.h server/ltm/mongodb/MemoryManager.h server/ltm/mongodb/ConnectionManager.h diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/operations.cpp b/source/RobotAPI/libraries/armem/server/ltm/disk/operations.cpp new file mode 100644 index 000000000..83d2b379d --- /dev/null +++ b/source/RobotAPI/libraries/armem/server/ltm/disk/operations.cpp @@ -0,0 +1,76 @@ +#include "operations.h" + +#include <RobotAPI/libraries/armem/client/query/Builder.h> +#include <RobotAPI/libraries/armem/server/ltm/disk/MemoryManager.h> +#include <RobotAPI/libraries/armem/server/query_proc/ltm.h> +#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h> + + +namespace armarx::armem::server::ltm +{ + + armem::wm::Memory + disk::load(const std::filesystem::path& directory) + { + const std::string key = directory.filename(); + armem::server::ltm::disk::MemoryManager manager; + manager.setName(key); + manager.setBasePath(directory); + manager.reload(); + + armem::client::QueryBuilder builder; + builder.all(); + armem::client::QueryInput queryInput = builder.buildQueryInput(); + queryInput.addQueryTargetToAll(armem::query::data::QueryTarget::LTM); + + armem::server::query_proc::ltm::MemoryQueryProcessor processor; + armem::wm::Memory memory = + processor.process(queryInput.toIce(), manager.getCacheAndLutNotConverted()); + manager.convert(memory); + + return memory; + } + + + namespace detail + { + template <class MemoryT> + void + store(const std::filesystem::path& directory, const MemoryT& memory) + { + const std::string& name = memory.name(); + if (std::filesystem::is_regular_file(directory / name)) + { + std::stringstream ss; + ss << "Could not export memory '" << name << "' to " << directory << ": " + << "Cannot overwrite existing file.\n"; + throw error::IOError(directory, ss.str()); + } + else + { + std::filesystem::create_directories(directory / name); + + armem::server::ltm::disk::MemoryManager manager; + manager.setName(name); + manager.setBasePath(directory / name); + manager.reload(); + manager.append(memory); + } + } + } // namespace detail + + + void + disk::store(const std::filesystem::path& directory, const armem::wm::Memory& memory) + { + detail::store(directory, memory); + } + + + void + disk::store(const std::filesystem::path& directory, const armem::server::wm::Memory& memory) + { + detail::store(directory, memory); + } + +} // namespace armarx::armem::server::ltm diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/operations.h b/source/RobotAPI/libraries/armem/server/ltm/disk/operations.h new file mode 100644 index 000000000..b18575996 --- /dev/null +++ b/source/RobotAPI/libraries/armem/server/ltm/disk/operations.h @@ -0,0 +1,18 @@ +#pragma once + +#include <filesystem> + +#include <RobotAPI/libraries/armem/core/forward_declarations.h> +#include <RobotAPI/libraries/armem/server/forward_declarations.h> + + +namespace armarx::armem::server::ltm::disk +{ + + armem::wm::Memory load(const std::filesystem::path& directory); + + void store(const std::filesystem::path& directory, const armem::wm::Memory& memory); + void store(const std::filesystem::path& directory, const armem::server::wm::Memory& memory); + + +} // namespace armarx::armem::server::ltm::disk -- GitLab