#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include "revng/PipeboxCommon/Common.h" #include "revng/PipeboxCommon/Concepts.h" #include "revng/PipeboxCommon/ObjectID.h" namespace revng::pypeline::helpers::native { class Container { public: virtual ~Container() = default; virtual std::set objects() = 0; virtual void deserialize(const std::map> &Input) = 0; virtual std::map serialize(llvm::ArrayRef ToSave) const = 0; virtual void *get() = 0; }; template class ContainerImpl final : public Container { private: T Instance; public: ContainerImpl() : Instance() {} ~ContainerImpl() override = default; public: virtual std::set objects() override { return Instance.objects(); } virtual void deserialize(const std::map> &Input) override { Instance.deserialize(Input); } virtual std::map serialize(llvm::ArrayRef ToSave) const override { std::vector Input; for (const ObjectID &Element : ToSave) Input.push_back(&Element); return Instance.serialize(Input); } public: virtual void *get() override { return &Instance; } }; } // namespace revng::pypeline::helpers::native