diff options
-rw-r--r-- | lib/persistence.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/persistence.h b/lib/persistence.h index 01b2a7e..d55062a 100644 --- a/lib/persistence.h +++ b/lib/persistence.h @@ -256,6 +256,23 @@ namespace Persistence { } }; + template<typename Map, typename Type = typename Map::mapped_type, auto Key = &Type::id> + struct MapByMember : public Persistence::SelectionT<std::shared_ptr<Type>> { + MapByMember(Map & m) : Persistence::SelectionT<std::shared_ptr<Type>> {s}, map {m} { } + + using Persistence::SelectionT<std::shared_ptr<Type>>::SelectionT; + void + endObject(Persistence::Stack & stk) override + { + map.emplace(std::invoke(Key, s), s); + stk.pop(); + } + + private: + std::shared_ptr<Type> s; + Map & map; + }; + struct Persistable { Persistable() = default; virtual ~Persistable() = default; |