SleakEngine
0.1.0
C++23 multi-backend game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
Serializable.hpp
Go to the documentation of this file.
1
#ifndef _SERIALIZABLE_H_
2
#define _SERIALIZABLE_H_
3
4
#include <iostream>
5
#include <string>
6
#include <memory>
7
#include <unordered_map>
8
#include <any>
9
#include <stdexcept>
10
#include <nlohmann/json.hpp>
11
#include <yaml-cpp/yaml.h>
12
13
namespace
Sleak
{
14
15
// Forward declarations
16
class
ISerializationContext
;
17
18
/// File format a Serializable can be saved to or loaded from.
19
/// @ingroup filesystem
20
enum class
SerializationFormat
{
21
Binary
,
22
JSON
,
23
YAML,
24
XML
,
25
Unknown
26
};
27
28
/**
29
* @interface ISerializationContext
30
* @brief Interface for serialization contexts.
31
* @ingroup filesystem
32
*/
33
class
ISerializationContext
{
34
public
:
35
virtual
~ISerializationContext
() =
default
;
36
37
// Serialization methods
38
virtual
void
Write
(
const
std::string& key,
const
std::any& value) = 0;
39
virtual
std::any
Read
(
const
std::string& key)
const
= 0;
40
41
// Stream-based methods
42
virtual
void
WriteToStream
(std::ostream& stream)
const
= 0;
43
virtual
void
ReadFromStream
(std::istream& stream) = 0;
44
};
45
46
/**
47
* @class Serializable
48
* @brief Base class for objects that can be serialized and deserialized.
49
* @ingroup filesystem
50
*/
51
class
Serializable
{
52
public
:
53
virtual
~Serializable
() =
default
;
54
55
/**
56
* @brief Serializes the object using the specified context.
57
* @param context The serialization context.
58
*/
59
virtual
void
Serialize
(
ISerializationContext
& context)
const
= 0;
60
61
/**
62
* @brief Deserializes the object using the specified context.
63
* @param context The deserialization context.
64
*/
65
virtual
void
Deserialize
(
const
ISerializationContext
& context) = 0;
66
67
/**
68
* @brief Serializes the object to a file.
69
* @param filePath The path to the file where the object will be saved.
70
*/
71
void
SerializeToFile
(
const
std::string& filePath)
const
;
72
73
/**
74
* @brief Deserializes the object from a file.
75
* @param filePath The path to the file from which the object will be loaded.
76
*/
77
void
DeserializeFromFile
(
const
std::string& filePath);
78
};
79
80
/**
81
* @class SerializationFactory
82
* @brief Detects file format and creates the appropriate serialization context.
83
* @ingroup filesystem
84
*/
85
class
SerializationFactory
{
86
public
:
87
/// Picks a format from filePath's extension (.bin/.json/.yaml/.yml).
88
static
SerializationFormat
DetectFormat
(
const
std::string& filePath);
89
/// Builds the context implementation matching format.
90
static
std::unique_ptr<ISerializationContext>
CreateContext
(
SerializationFormat
format);
91
};
92
93
}
// namespace Sleak
94
95
#endif
// _SERIALIZABLE_H_
Sleak::ISerializationContext
Interface for serialization contexts.
Definition
Serializable.hpp:33
Sleak::ISerializationContext::WriteToStream
virtual void WriteToStream(std::ostream &stream) const =0
Sleak::ISerializationContext::~ISerializationContext
virtual ~ISerializationContext()=default
Sleak::ISerializationContext::Write
virtual void Write(const std::string &key, const std::any &value)=0
Sleak::ISerializationContext::Read
virtual std::any Read(const std::string &key) const =0
Sleak::ISerializationContext::ReadFromStream
virtual void ReadFromStream(std::istream &stream)=0
Sleak::Serializable
Base class for objects that can be serialized and deserialized.
Definition
Serializable.hpp:51
Sleak::Serializable::Serialize
virtual void Serialize(ISerializationContext &context) const =0
Serializes the object using the specified context.
Sleak::Serializable::Deserialize
virtual void Deserialize(const ISerializationContext &context)=0
Deserializes the object using the specified context.
Sleak::Serializable::DeserializeFromFile
void DeserializeFromFile(const std::string &filePath)
Deserializes the object from a file.
Definition
Serializable.cpp:150
Sleak::Serializable::~Serializable
virtual ~Serializable()=default
Sleak::Serializable::SerializeToFile
void SerializeToFile(const std::string &filePath) const
Serializes the object to a file.
Definition
Serializable.cpp:137
Sleak::SerializationFactory
Detects file format and creates the appropriate serialization context.
Definition
Serializable.hpp:85
Sleak::SerializationFactory::CreateContext
static std::unique_ptr< ISerializationContext > CreateContext(SerializationFormat format)
Builds the context implementation matching format.
Definition
Serializable.cpp:175
Sleak::SerializationFactory::DetectFormat
static SerializationFormat DetectFormat(const std::string &filePath)
Picks a format from filePath's extension (.bin/.json/.yaml/.yml).
Definition
Serializable.cpp:164
Sleak::EventType::Unknown
@ Unknown
Definition
Event.hpp:24
Sleak::SerializationFormat
SerializationFormat
Definition
Serializable.hpp:20
Sleak::SerializationFormat::JSON
@ JSON
Definition
Serializable.hpp:22
Sleak::SerializationFormat::XML
@ XML
Definition
Serializable.hpp:24
Sleak::SerializationFormat::Binary
@ Binary
Definition
Serializable.hpp:21
Sleak
Root namespace for everything the engine exposes.
Definition
Camera.hpp:10
include
public
FileSystem
Serializable.hpp
Generated on
for SleakEngine by
1.18.0