Plasma Engine  2.0
Loading...
Searching...
No Matches
DeduplicationWriteContext.h
1
2#pragma once
3
4#include <Foundation/Containers/HashTable.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 plStreamWriter;
12
15class PL_FOUNDATION_DLL plDeduplicationWriteContext : public plSerializationContext<plDeduplicationWriteContext>
16{
17 PL_DECLARE_SERIALIZATION_CONTEXT(plDeduplicationWriteContext);
18
19public:
22
24 template <typename T>
25 plResult WriteObject(plStreamWriter& inout_stream, const T& obj); // [tested]
26
28 template <typename T>
29 plResult WriteObject(plStreamWriter& inout_stream, const plSharedPtr<T>& pObject); // [tested]
30
32 template <typename T>
33 plResult WriteObject(plStreamWriter& inout_stream, const plUniquePtr<T>& pObject); // [tested]
34
36 template <typename ArrayType, typename ValueType>
37 plResult WriteArray(plStreamWriter& inout_stream, const plArrayBase<ValueType, ArrayType>& array); // [tested]
38
40 template <typename KeyType, typename Comparer>
41 plResult WriteSet(plStreamWriter& inout_stream, const plSetBase<KeyType, Comparer>& set); // [tested]
42
43 enum class WriteMapMode
44 {
45 DedupKey,
46 DedupValue,
47 DedupBoth
48 };
49
51 template <typename KeyType, typename ValueType, typename Comparer>
52 plResult WriteMap(plStreamWriter& inout_stream, const plMapBase<KeyType, ValueType, Comparer>& map, WriteMapMode mode); // [tested]
53
54private:
55 template <typename T>
56 plResult WriteObjectInternal(plStreamWriter& stream, const T* pObject);
57
59};
60
61#include <Foundation/IO/Implementation/DeduplicationWriteContext_inl.h>
Base class for all array containers. Implements all the basic functionality that only requires a poin...
Definition ArrayBase.h:19
Serialization Context that de-duplicates objects when writing to a stream. Duplicated objects are ide...
Definition DeduplicationWriteContext.h:16
plResult WriteObject(plStreamWriter &inout_stream, const T &obj)
Writes a single object to the stream. Can be either a reference or a pointer to the object.
plResult WriteObject(plStreamWriter &inout_stream, const plSharedPtr< T > &pObject)
Writes a single object to the stream.
plResult WriteObject(plStreamWriter &inout_stream, const plUniquePtr< T > &pObject)
Writes a single object to the stream.
Definition HashTable.h:333
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 out (write) streams.
Definition Stream.h:107
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