You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* implement brief syntax for std::optional and std::bitset. #116 (thanks to [Destroyerrrocket](https://github.com/Destroyerrrocket))
4
+
* implement brief syntax for eastl::optional and eastl::bitset. #116 (thanks to [Destroyerrrocket](https://github.com/Destroyerrrocket))
5
5
* improve performance for buffer adapters. #118 (thanks to [Destroyerrrocket](https://github.com/Destroyerrrocket))
6
6
* check if should swap by taking into account actual type (in addition to configuration). #105 (thanks to [SoftdriveFelix](https://github.com/SoftdriveFelix))
7
7
* fix compile errors for latest compilers. #106 (thanks to [NBurley93](https://github.com/NBurley93))
@@ -27,8 +27,8 @@
27
27
28
28
### Improvements
29
29
* add 16 byte value support #75 (thanks to [Victor Stewart](https://github.com/victorstewart))
30
-
* avoid reinitializing nontrivial std::variant #77 (thanks to [Robbert van der Helm](https://github.com/robbert-vdh))
31
-
* avoid reinitializing nontrivial std::optional.
30
+
* avoid reinitializing nontrivial eastl::variant #77 (thanks to [Robbert van der Helm](https://github.com/robbert-vdh))
* fix missing headers for GCC11, also added test to check includes #82 (thanks to [michael-mueller-git](https://github.com/michael-mueller-git))
@@ -116,7 +116,7 @@ If you can trust your data this will improve deserialization performance. Error
116
116
117
117
* improved design for serializer/deserializer *context*. It was hard to understand and easy to misuse, so several changes were made.
118
118
* removed *internal* context from config, because it doesn't actually solve any problems, only allows doing the same thing in multiple ways.
119
-
* removed `T* context()`. This allowed to get a context that is `std::tuple<...>`, but you can do the same with other methods, by wrapping in an outer tuple, e.g. `std::tuple<std::tuple<...>>`.
119
+
* removed `T* context()`. This allowed to get a context that is `eastl::tuple<...>`, but you can do the same with other methods, by wrapping in an outer tuple, e.g. `eastl::tuple<eastl::tuple<...>>`.
120
120
* if a context is defined, in serializer/deserializer, it is passed (and stored) by reference as a first argument (instead of pointer). Other parameters are forwarded to a input/output adapter.
121
121
* changed signature `T* context<T>` to `T& context<T>`, this will either return context or doesn't compile, previously it could also return nullptr.
122
122
*`context<T>` and `contextOrNull<T>` now also check if a type is convertible, so it can work with base classes
@@ -129,7 +129,7 @@ This allows much easier serialization customization, because no additional state
129
129
* removed various functions/classes that became redundant:
130
130
**AdapterWriter/Reader* classes - their functionality is moved to *adapters*.
131
131
**AdapterAccess* class - now serializer/deserializer expose adapter directly via `adapter()` method.
132
-
Additionally adapter can be moved out if serializer/deserializer is rvalue .e.g `auto adapter = std::move(ser).adapter();`.
132
+
Additionally adapter can be moved out if serializer/deserializer is rvalue .e.g `auto adapter = eastl::move(ser).adapter();`.
133
133
* removed *Writer/Reader* parameters from extensions *serialize/deserialize* methods - because serializer/deserializer now expose *adapter* directly.
134
134
**archive* from serializer/deserializer - because `operator()` do the same thing, but it is more terse, and is compatible with `cereal` library.
135
135
**align* function from serializer/deserializer - it can now be called directly on input/output adapter.
@@ -167,12 +167,12 @@ e.g. instead of writing `s.container(obj, [](S& s, MyData& data) {s.ext(data, My
* new extensions **StdTuple** and **StdVariant** for `std::tuple` and `std::variant`. These are the first extensions that requires C++17, or higher, standard enabled.
171
-
Although `std::tuple` is C++11 type, but from usage perspective it has exactly the same requirements as `std::variant` and relies heavily on having class template argument deduction guides to make it convenient to use.
172
-
You can easily use `std::tuple` without any extension at all, so the main motivation was to create convenient interface for **StdVariant** and use the same interface for **StdTuple** as well.
170
+
* new extensions **StdTuple** and **StdVariant** for `eastl::tuple` and `eastl::variant`. These are the first extensions that requires C++17, or higher, standard enabled.
171
+
Although `eastl::tuple` is C++11 type, but from usage perspective it has exactly the same requirements as `eastl::variant` and relies heavily on having class template argument deduction guides to make it convenient to use.
172
+
You can easily use `eastl::tuple` without any extension at all, so the main motivation was to create convenient interface for **StdVariant** and use the same interface for **StdTuple** as well.
173
173
* instead of providing custom lambda to overload each type in tuple or variant, there was added several helper callable objects.
174
174
**OverloadValue** wrapper around `s.value<N>(o)`, **OverloadExtValue** wrapper around `s.ext<N>(o, Ext{})` and **OverloadExtObject** wrapper around `s.ext(o, Ext{})`.
175
-
* new extensions **StdDuration** and **StdTimePoint** for `std::chrono::duration` and `std::chrono::time_point`.
175
+
* new extensions **StdDuration** and **StdTimePoint** for `eastl::chrono::duration` and `eastl::chrono::time_point`.
176
176
177
177
### Improvements
178
178
tests now uses `gtest_discover_tests` function, to automatically discover tests, which requires CMake 3.10.
@@ -192,7 +192,7 @@ tests now uses `gtest_discover_tests` function, to automatically discover tests,
192
192
It is not necessary to enforce class invariant immediately, because internal object representation will be overriden anyway.
193
193
194
194
### Improvements
195
-
*`StdSmartPtr` supports `std::unique_ptr` with custom deleter.
195
+
*`StdSmartPtr` supports `eastl::unique_ptr` with custom deleter.
196
196
*`*InputBufferAdapter`(all) can also accept const buffer;
* added runtime polymorphism support for pointer like types (raw and smart pointers).
247
247
In order to enable polymorphism new **PolymorphicContext** was created. It provides capability to register classes with serializer/deserializer.
248
248
* runtime polymorphism can be customized, by replacing **StandardRTTI** from <bitsery/ext/utils/rtti_utils.h> header.
249
-
* added smart pointers support for std::unique_ptr, std::shared_ptr and std::weak_ptr via **StdSmartPtr** extension.
249
+
* added smart pointers support for eastl::unique_ptr, eastl::shared_ptr and eastl::weak_ptr via **StdSmartPtr** extension.
250
250
* new **UnsafeInputBufferAdapter** doesn't check for buffer size on deserialization, on some compilers can improve deserialization performance up to ~40%.
251
251
252
252
### Improvements
253
253
* creatly improved interface for extending/implementing support for pointer like types. Now all pointer like types extends from **PointerObjectExtensionBase** and implements/configures required details.
* reimplemented **PointerLinkingContext** to properly support shared objects and runtime polymorphism, pointer ownership for shared objects now has two states: SharedOwner e.g. std::shared_ptr and SharedObserver std::weak_ptr.
255
+
* reimplemented **PointerLinkingContext** to properly support shared objects and runtime polymorphism, pointer ownership for shared objects now has two states: SharedOwner e.g. eastl::shared_ptr and SharedObserver eastl::weak_ptr.
256
256
257
257
### Other notes
258
258
There is one *minor?* issue/limitation for pointer like types that uses virtual inheritance. When several pointers points to same object through different static type. it will not work correctly e.g.:
259
259
```cpp
260
260
struct Derived: virtual Base {...};
261
261
struct MyData {
262
-
std::shared_ptr<Derived> sptr;
263
-
std::weak_ptr<Base> wptddr;
262
+
eastl::shared_ptr<Derived> sptr;
263
+
eastl::weak_ptr<Base> wptddr;
264
264
}
265
265
```
266
266
In this example wptr and sptr have different static type, and *Derived* is virtually inherited from *Base*, so I get different pointer address for different types.
@@ -310,19 +310,19 @@ In order to correctly manage pointer ownership, three extensions was created in
310
310
To validate and update pointers **PointerLinkingContext** have to be passed to serialization/deserialization.
311
311
It ensures that all pointers are valid, that same pointer doesn't have multiple owners, and non-owning pointers doesn't point outside of scope (i.e. non owning pointers points to data that is serialized/deserialized), see [raw_pointers example](examples/raw_pointers.cpp) for usage example.
312
312
313
-
*Currently polimorphism and std::shared_ptr, std::unique_ptr is not supported.*
313
+
*Currently polimorphism and eastl::shared_ptr, eastl::unique_ptr is not supported.*
314
314
315
315
* added **context\<T\>()** overload to *BasicSerializer/BasicDeserializer* and now they became typesafe.
316
-
For better extensions support, added posibility to have multiple types in context with *std::tuple*.
317
-
E.g. when using multiple extensions, that requires specific contexts, together with your custom context, you can define your context as *std::tuple\<PointerLinkingContext, MyContext\>* and in serialization function you can correctly get your data via *context\<MyContext\>()*.
316
+
For better extensions support, added posibility to have multiple types in context with *eastl::tuple*.
317
+
E.g. when using multiple extensions, that requires specific contexts, together with your custom context, you can define your context as *eastl::tuple\<PointerLinkingContext, MyContext\>* and in serialization function you can correctly get your data via *context\<MyContext\>()*.
318
318
319
319
320
320
### Improvements
321
321
322
322
* new **OutputBufferedStreamAdapter** use internal buffer instead of directly writing to stream, can get more than 2x performance increase.
323
323
* can use any contiguous container as internal buffer.
324
-
* when using fixed-size, stack allocated container (*std::array*), buffer size via constructor is ignored.
325
-
* default internal buffer is *std::array<char,256>*.
324
+
* when using fixed-size, stack allocated container (*eastl::array*), buffer size via constructor is ignored.
325
+
* default internal buffer is *eastl::array<char,256>*.
326
326
* added *static_assert* when trying to use *BufferAdapter* with non contiguous container.
327
327
328
328
@@ -400,7 +400,7 @@ Be careful when using deserializing untrusted data and make sure to enforce fund
400
400
***ext** to **extend** and changed its interface, to make it more easy to extend.
401
401
* alias functions that write bytes directly no has *b* (meaning bytes) at the end of the name eg. *value4* now is *value4b*.
402
402
* changed BufferWriter/Reader behaviour:
403
-
* added support for fixed size buffers for better serializer performance (more than 50% improvement). Default config is resizable buffer (*std::vector<uint8_t>*).
403
+
* added support for fixed size buffers for better serializer performance (more than 50% improvement). Default config is resizable buffer (*eastl::vector<uint8_t>*).
404
404
* after serialization, call *getWrittenRange* to get valid range written to buffer, because BufferWritter for resizable buffer now always resize to *capacity* to avoid using *back_insert_iterator* for better performance.
405
405
* BufferReader has constructor with iterators (range), and raw value type pointers (begin, end).
406
406
* renamed BufferReader **isCompleted** to **isCompletedSuccessfully**, that returns true only when there is no errors and buffer is fully read.
@@ -423,7 +423,7 @@ Be careful when using deserializing untrusted data and make sure to enforce fund
423
423
424
424
* endianness support, default network configuration is *little endian*
425
425
* added user extensible function **ext**, to work with objects that require different serialization/deserialization path (e.g. pointers)
426
-
***optional** extension (for *ext* function), to work with *std::optional* types
426
+
***optional** extension (for *ext* function), to work with *eastl::optional* types
0 commit comments