From f9316aa5d2a201fe1feb687baa64e20c8cbea27c Mon Sep 17 00:00:00 2001 From: Terraneo Federico <fede.tft@miosix.org> Date: Tue, 8 May 2018 20:45:58 +0200 Subject: [PATCH] Documentation --- .readme1.png | Bin 0 -> 12468 bytes README.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 .readme1.png diff --git a/.readme1.png b/.readme1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce780b64029564268bec3c940fdbd2d9cb7cfd5 GIT binary patch literal 12468 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 7e792d2..a2ff7db 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,95 @@ Trivial serialization for C++ ============================= -Documentation is a work in progress. +As you known, serialization is not supported by standard C++. +For this reason, many libraries have been made, such as cereal, +boost::serialization, flatbuffers, protocol buffers and many more to overcome +this limitation. +These libraries support the general case of serializing any type +in a portable way but all require some help from the developer. +This can range from adding a member function to serialize/unserialize the +type, tagging types and/or fields with their name, all the way up to +learning an interface definition language and dealing with a code generator. +But what if we just need to serialize some simple object? Is this boilerplate +code really needed? + +TSCPP is a simple serialization library limited to flat types, that do not +contain pointers, references or virtual functions. +By restricting to this case it is possible to make a really simple +serialization library that just works, serializing objects with +zero boilerplate code, and is fast too. + +## A code example + +Here's an example showing how to serialize/unserialize using the TSCPP +stream API. + +```C++ +#include <fstream> +#include <tscpp/stream.h> + +using namespace std; +using namespace tscpp; + +class Bar +{ +public: + Bar(int x, int y) : x(x), y(y) {} + int x,y; +}; + +class Foo +{ +public: + Foo() : b(-1,1) + { + for(int i=0;i<10;i++) z[i]=i; + } + Bar b; + int z[10]; +}; + +int main() +{ + Foo foo; + + ofstream os("serialized.dat",ios::binary); + OutputArchive oa(os); + + oa<<foo; //How to serialize an object + + os.close(); + ifstream is("serialized.dat",ios::binary); + InputArchive ia(is); + + Foo foo2; + ia>>foo2; //How to unserialize an object +} +``` + +TSCPP also supports a buffer API to serialize to raw memory buffers instead +of std streams. Moreover, an unique TypePool concept allows to register +callbacks associated to individual types and unserialize files where the +order in which objects have been serialized is unknown. + +## How does it work + +TSCPP starts from the C tradition of writing raw structs to a file, or to +memcpy them to a memory buffer. To this it adds C++ RTTI support in order to +perform type checking when unserializing. + +The serialization format is simply the C++ mangled name of the type to be +serialized (as returned by typeid(type).name()), followed by a '\0' string +terminator, followed by the object itself. + + + +## What are the limitations + +* Only objects with a flat meory layout, i.e. without pointers, references, virtual functions can be serialized +* The serialization format is not portable between different machines if + * the endianness of the two machines differ + * the C++ name mangling scheme differs (e.g: Windows has its own incompatible name mangling scheme) + * the padding of fields differs +* Object versioning is not supported, trying to unserialize a previous version of an object will result in wrong bits in its fields -- GitLab