A number of breaking API changes have been made for the 1.0 release. Please take note of these changes when upgrading.
The Node API now separates tree initialization from parsing. After calling one of the
mpack_tree_init()functions, you must explicitly call
mpack_tree_parse()before accessing any nodes.
The configuration file
mpack-config.his now optional, and requires
MPACK_HAS_CONFIGin order to be included. This means you must define
MPACK_HAS_CONFIGwhen upgrading or your config file will be ignored!
Extension types are now disabled by default. You must define
MPACK_EXTENSIONSto use them.
mpack_tag_tis now considered an opaque type to prevent future breakage when changing its layout. Compatibility is maintained for this release, but this may change in future releases.
The Node API can now parse multiple messages from a data source.
mpack_tree_parse()can be called repeatedly to parse each message.
The Node API can now parse messages indefinitely from a continuous stream. A tree can be initialized with
mpack_tree_init_stream()to receive a callback for more data.
The Node API can now parse messages incrementally from a non-blocking stream. Call
mpack_tree_try_parse()with a non-blocking read function to start and resume parsing. It will return true when a complete message has become available.
The stdio helpers now allow reading from a
_init_file()functions have been renamed to
_init_filename(). (The old names will continue to work for a few more versions.)
The Node API now returns a node of "missing" type instead of "nil" type for optional map lookups. This allows the caller to tell the difference between a key having value nil and a missing key.
The writer now supports a v4 compatibility mode. Call
mpack_writer_set_version(writer, mpack_version_v4);to encode without using the
exttypes. (This requires
The timestamp type has been implemented. A timestamp is a signed number of nanoseconds since the Unix epoch (1970-01-01T00:00:00Z). (This requires
Bug Fixes and Other Changes:
Fixed an allocation bug when closing a growable writer without having written anything (#58).
The reader's skip function is no longer ignored under
- Fixed incorrect element tracking in
- Added type-generic writer functions
mpack_write_object_bytes()to insert pre-encoded MessagePack into a larger message
- Enabled strings in all builds by default
- Fixed unit test errors under
- Fixed some compiler warnings
- Added reader helper functions to expect re-ordered map keys
- Improved documentation and added Pages
- Made node key lookups check for duplicate keys
- Added various UTF-8 checking functions for reader and nodes
- Added support for compiling as C in recent versions of Visual Studio
- Fixed miscellaneous bugs and improved performance
mpack_writer_destroy_cancel(). You must now flag an error (such as
mpack_error_data) in order to cancel reading.
- Added many code size optimizations.
MPACK_OPTIMIZE_FOR_SIZEis no longer experimental.
- Improved and reorganized Writer documentation
- Made writer flag
mpack_error_ioif writing too much data without a flush callback
- Added optional
skipcallback and optimized
- Fixed various compiler and code analysis warnings
- Optimized speed and memory usage
- Fixed various bugs in UTF-8 checking, error handler callbacks, out-of-memory and I/O errors, debug print functions and more
- Added many missing Tag and Expect functions such as
- Added extensive unit tests
longjmpsupport has been replaced by error callbacks. You can safely
longjmpor throw C++ exceptions out of error callbacks. Be aware of local variable invalidation rules regarding
setjmpif you use it. See the documentation for
mpack_reader_error_tand issue #19 for more details.
inlinefunctions in the MPack API are no longer
static. A single non-
inlinedefinition of each
inlinefunction is emitted, so they behave like normal functions with external linkage.
- Configuration options can now be pre-defined before including
mpack-config.h, so you can customize MPack by defining these in your build system rather than editing the configuration file.
mpack_node_tis now a handle, so it should be passed by value, not by pointer. Porting to the new version should be as simple as replacing
mpack_node_tin your code.
- Various other minor API changes have been made.
- Major performance improvements were made across all aspects of MPack.
mpack_writer_init_growable()to write to a growable buffer
- Converted tree parser to support node pool and pages. The Node API no longer requires an allocator.
- Added Xcode unit test project, included projects in release package
- Fixed various bugs