DNA Calib 1.1
Project brief
Archive.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#ifdef _MSC_VER
6 #pragma warning(push)
7 #pragma warning(disable : 4365 4987)
8#endif
9#include <utility>
10#ifdef _MSC_VER
11 #pragma warning(pop)
12#endif
13
14namespace terse {
15
16template<class ArchiveImpl>
17class Archive {
18 public:
19 explicit Archive(ArchiveImpl* impl_) : impl{impl_}, userData{nullptr} {
20 }
21
22 bool isOk() {
23 return impl->isOk();
24 }
25
26 void sync() {
27 impl->sync();
28 }
29
30 void label(const char* value) {
31 impl->label(value);
32 }
33
34 template<typename ... Args>
35 void operator()(Args&& ... args) {
36 dispatch(std::forward<Args>(args)...);
37 }
38
39 template<class TSerializable>
40 ArchiveImpl& operator<<(TSerializable& source) {
41 dispatch(source);
42 return *impl;
43 }
44
45 template<class TSerializable>
46 ArchiveImpl& operator>>(TSerializable& dest) {
47 dispatch(dest);
48 return *impl;
49 }
50
51 void* getUserData() const {
52 return userData;
53 }
54
55 void setUserData(void* data) {
56 userData = data;
57 }
58
59 protected:
60 template<typename Head>
61 void dispatch(Head&& head) {
62 impl->process(std::forward<Head>(head));
63 }
64
65 template<typename Head, typename ... Tail>
66 void dispatch(Head&& head, Tail&& ... tail) {
67 dispatch(std::forward<Head>(head));
68 dispatch(std::forward<Tail>(tail)...);
69 }
70
71 private:
72 ArchiveImpl* impl;
73 void* userData;
74};
75
76} // namespace terse
Definition: Archive.h:17
ArchiveImpl & operator<<(TSerializable &source)
Definition: Archive.h:40
void dispatch(Head &&head)
Definition: Archive.h:61
void * userData
Definition: Archive.h:73
void sync()
Definition: Archive.h:26
ArchiveImpl & operator>>(TSerializable &dest)
Definition: Archive.h:46
Archive(ArchiveImpl *impl_)
Definition: Archive.h:19
ArchiveImpl * impl
Definition: Archive.h:72
void operator()(Args &&... args)
Definition: Archive.h:35
bool isOk()
Definition: Archive.h:22
void * getUserData() const
Definition: Archive.h:51
void label(const char *value)
Definition: Archive.h:30
void dispatch(Head &&head, Tail &&... tail)
Definition: Archive.h:66
void setUserData(void *data)
Definition: Archive.h:55
Definition: Archive.h:14