diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-04-30 01:03:42 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-11-07 16:41:37 +0000 |
commit | a31858d29048735b812d385f75db4ed6a6a94556 (patch) | |
tree | fffd08d958c4970be617b3ad36905b54f2445bad /lib/persistence.cpp | |
parent | Implement shared_ptr support (diff) | |
download | ilt-a31858d29048735b812d385f75db4ed6a6a94556.tar.bz2 ilt-a31858d29048735b812d385f75db4ed6a6a94556.tar.xz ilt-a31858d29048735b812d385f75db4ed6a6a94556.zip |
Fix the fact I've been spelling persistence wrong this whole time
Diffstat (limited to 'lib/persistence.cpp')
-rw-r--r-- | lib/persistence.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/persistence.cpp b/lib/persistence.cpp new file mode 100644 index 0000000..5744cd7 --- /dev/null +++ b/lib/persistence.cpp @@ -0,0 +1,81 @@ +#include "persistence.h" +#include <map> + +namespace Persistence { + using Factories + = std::pair<std::function<std::unique_ptr<Persistable>()>, std::function<std::shared_ptr<Persistable>()>>; + using NamedTypeFactories = std::map<std::string_view, Factories>; + static NamedTypeFactories namedTypeFactories; + + void + Persistable::addFactory(const std::string_view t, std::function<std::unique_ptr<Persistable>()> fu, + std::function<std::shared_ptr<Persistable>()> fs) + { + namedTypeFactories.emplace(t, std::make_pair(std::move(fu), std::move(fs))); + } + + std::unique_ptr<Persistable> + Persistable::callFactory(const std::string_view t) + { + return namedTypeFactories.at(t).first(); + } + + std::shared_ptr<Persistable> + Persistable::callSharedFactory(const std::string_view t) + { + return namedTypeFactories.at(t).second(); + } + + void + Selection::setValue(float &) + { + throw std::runtime_error("Unexpected float"); + } + + void + Selection::setValue(bool &) + { + throw std::runtime_error("Unexpected bool"); + } + + void + Selection::setValue(const std::nullptr_t &) + { + throw std::runtime_error("Unexpected null"); + } + + void + Selection::setValue(std::string &) + { + throw std::runtime_error("Unexpected string"); + } + + void + Selection::beginArray(Stack &) + { + throw std::runtime_error("Unexpected array"); + } + + void + Selection::beginObject(Stack &) + { + throw std::runtime_error("Unexpected object"); + } + + void + Selection::beforeValue(Stack &) + { + throw std::runtime_error("Unexpected value"); + } + + SelectionPtr + Selection::select(const std::string &) + { + throw std::runtime_error("Unexpected select"); + } + + void + Selection::endObject(Stack &) + { + } +} |