Plasma Engine  2.0
Loading...
Searching...
No Matches
DeduplicationReadContext.h
1
2#pragma once
3
4#include <Foundation/Containers/DynamicArray.h>
5#include <Foundation/Containers/Map.h>
6#include <Foundation/Containers/Set.h>
7#include <Foundation/IO/SerializationContext.h>
8#include <Foundation/Types/SharedPtr.h>
9#include <Foundation/Types/UniquePtr.h>
10
11class plStreamReader;
12
14class PL_FOUNDATION_DLL plDeduplicationReadContext : public plSerializationContext<plDeduplicationReadContext>
15{
16 PL_DECLARE_SERIALIZATION_CONTEXT(plDeduplicationReadContext);
17
18public:
21
23 template <typename T>
24 plResult ReadObjectInplace(plStreamReader& inout_stream, T& ref_obj); // [tested]
25
27 template <typename T>
28 plResult ReadObject(plStreamReader& inout_stream, T*& ref_pObject,
29 plAllocator* pAllocator = plFoundation::GetDefaultAllocator()); // [tested]
30
33 template <typename T>
34 plResult ReadObject(plStreamReader& inout_stream, plSharedPtr<T>& ref_pObject,
35 plAllocator* pAllocator = plFoundation::GetDefaultAllocator()); // [tested]
36
39 template <typename T>
40 plResult ReadObject(plStreamReader& inout_stream, plUniquePtr<T>& ref_pObject,
41 plAllocator* pAllocator = plFoundation::GetDefaultAllocator()); // [tested]
42
44 template <typename ArrayType, typename ValueType>
45 plResult ReadArray(plStreamReader& inout_stream, plArrayBase<ValueType, ArrayType>& ref_array,
46 plAllocator* pAllocator = plFoundation::GetDefaultAllocator()); // [tested]
47
49 template <typename KeyType, typename Comparer>
50 plResult ReadSet(plStreamReader& inout_stream, plSetBase<KeyType, Comparer>& ref_set,
51 plAllocator* pAllocator = plFoundation::GetDefaultAllocator()); // [tested]
52
53 enum class ReadMapMode
54 {
55 DedupKey,
56 DedupValue,
57 DedupBoth
58 };
59
61 template <typename KeyType, typename ValueType, typename Comparer>
62 plResult ReadMap(plStreamReader& inout_stream, plMapBase<KeyType, ValueType, Comparer>& ref_map, ReadMapMode mode,
64 plAllocator* pValueAllocator = plFoundation::GetDefaultAllocator()); // [tested]
65
66private:
67 template <typename T>
68 plResult ReadObject(plStreamReader& stream, T& obj, plAllocator* pAllocator); // [tested]
69
70 plDynamicArray<void*> m_Objects;
71};
72
73#include <Foundation/IO/Implementation/DeduplicationReadContext_inl.h>
Base class for all memory allocators.
Definition Allocator.h:23
Base class for all array containers. Implements all the basic functionality that only requires a poin...
Definition ArrayBase.h:19
Serialization Context that reads de-duplicated objects from a stream and restores the pointers.
Definition DeduplicationReadContext.h:15
plResult ReadObjectInplace(plStreamReader &inout_stream, T &ref_obj)
Reads a single object inplace.
Definition DynamicArray.h:81
static PL_ALWAYS_INLINE plAllocator * GetDefaultAllocator()
The default allocator can be used for any kind of allocation if no alignment is required.
Definition Basics.h:82
An associative container. Similar to STL::map.
Definition Map.h:193
Base class for serialization contexts. A serialization context can be used to add high level logic to...
Definition SerializationContext.h:10
A set container that only stores whether an element resides in it or not. Similar to STL::set.
Definition Set.h:13
A Shared ptr manages a shared object and destroys that object when no one references it anymore....
Definition SharedPtr.h:10
Interface for binary in (read) streams.
Definition Stream.h:22
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54