* CbWriter was expecting BeginObject/BeginArray call before any fields were written, so did not handle writing fields directly to the root scope.
* Fields written at the root scope were not being flushed immediately after writing. Rest of the class assumes that any complete fields at root scope had already been accounted for in object size.
#preflight none
#fyi Joakim.Lindqvist
[CL 24520927 by Ben Marsh in ue5-main branch]
* New base class (CbWriterBase) has a virtual method to allocate chunks of memory for output, while still sharing common functionality for tracking scope state.
* Data for fixing up size/offset fields is written to blocks of memory returned by the CbWriterBase allocator rather than just to the final output buffer.
* Added support for embedded externally allocated blocks of data into the output stream, correctly updating size fields of containing fields.
#preflight none
#fyi Joakim.Lindqvist
[CL 24505997 by Ben Marsh in ue5-main branch]
- Fix serialization of lists, directories and arrays that are set to null.
- Throw an exception when serializing a type that does not have any explicit compact binary field attributes. This is usually an error, caused by serializing a framework type with no matching converter, but can also occur when serializing an empty base class instance. To handle these situations, the class can be marked with [CbObject] to explicitly opt-in to being valid for serialization.
#fyi Joe.Kirchoff
#preflight none
[CL 19526671 by Ben Marsh in ue5-main branch]
- Now does all string manipulations in UTF8 rather than converting to and fro with data received from Perforce
- Added support for reading a stream out of a CbWriter object. This allows pushing data directly to Horde Storage from the piecemeal 1kb buffers it allocates without having to concatenate everything into a contiguous array first, removing some big allocations and data copying on the common path for serializing objects into Horde Storage.
- Refactored the way that BundleNodeRef objects work so they don't need to track the Bundle that owns them, so we can add some serialization/deserialization tests without having to set up as much framework code.
#preflight none
[CL 19345769 by Ben Marsh in ue5-main branch]
- Tree can now be modified without having to have entire working set in memory.
- Multiple nodes can be compressed/decompressed together, and an optional IMemoryCache allows caching decompressed blocks.
- Added support for specifying custom compact-binary serializers on individual properties.
- Added test suite to test bundling functionality.
- Fixed issue where VarInts of negative values would not serialize correctly.
#preflight 621952f68849a7424fa36567
[CL 19158249 by Ben Marsh in ue5-main branch]