diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-04-25 19:39:26 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-11-07 16:41:37 +0000 |
commit | 8e8d707db19c12ffa7c018206ebe2582f0d86355 (patch) | |
tree | 68f9c54942730729db671286862247e8d3b42a82 /lib | |
parent | Erring toward complete JSON loader (diff) | |
download | ilt-8e8d707db19c12ffa7c018206ebe2582f0d86355.tar.bz2 ilt-8e8d707db19c12ffa7c018206ebe2582f0d86355.tar.xz ilt-8e8d707db19c12ffa7c018206ebe2582f0d86355.zip |
Support chaining persist calls for subclasses
Diffstat (limited to 'lib')
-rw-r--r-- | lib/persistance.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/persistance.h b/lib/persistance.h index 7f28ad1..0082d4c 100644 --- a/lib/persistance.h +++ b/lib/persistance.h @@ -59,8 +59,8 @@ namespace Persistanace { struct PersistanceStore { // virtual bool persistType(const std::type_info &) = 0; template<typename T> - bool - persistValue(const std::string_view & key, T & value) + inline bool + persistValue(const std::string_view key, T & value) { if (key == name) { sel = std::make_unique<SelectionT<T>>(std::ref(value)); @@ -115,7 +115,7 @@ namespace Persistanace { virtual ~Persistable() = default; DEFAULT_MOVE_COPY(Persistable); - virtual void persist(PersistanceStore & store) = 0; + virtual bool persist(PersistanceStore & store) = 0; static void addFactory(const std::string_view, std::function<std::unique_ptr<Persistable>()>); static std::unique_ptr<Persistable> callFactory(const std::string_view); @@ -166,7 +166,9 @@ namespace Persistanace { } } PersistanceStore ps {mbr}; - v->persist(ps); + if (v->persist(ps)) { + throw std::runtime_error("cannot find member: " + mbr); + } return std::move(ps.sel); } } @@ -206,6 +208,7 @@ namespace Persistanace { { stk.push(std::make_unique<SelectionObj>(v)); } + void EndObject(Stack & stk) override { |