mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-22 08:34:35 +02:00
222 lines
5.7 KiB
Markdown
222 lines
5.7 KiB
Markdown
`msgpack` for C/C++
|
|
===================
|
|
|
|
Version 1.4.2 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
|
|
|
It's like JSON but small and fast.
|
|
|
|
Overview
|
|
--------
|
|
|
|
[MessagePack](http://msgpack.org/) is an efficient binary serialization
|
|
format, which lets you exchange data among multiple languages like JSON,
|
|
except that it's faster and smaller. Small integers are encoded into a
|
|
single byte while typical short strings require only one extra byte in
|
|
addition to the strings themselves.
|
|
|
|
Example
|
|
-------
|
|
|
|
In C:
|
|
|
|
```c
|
|
#include <msgpack.h>
|
|
#include <stdio.h>
|
|
|
|
int main(void)
|
|
{
|
|
/* msgpack::sbuffer is a simple buffer implementation. */
|
|
msgpack_sbuffer sbuf;
|
|
msgpack_sbuffer_init(&sbuf);
|
|
|
|
/* serialize values into the buffer using msgpack_sbuffer_write callback function. */
|
|
msgpack_packer pk;
|
|
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
|
|
|
|
msgpack_pack_array(&pk, 3);
|
|
msgpack_pack_int(&pk, 1);
|
|
msgpack_pack_true(&pk);
|
|
msgpack_pack_str(&pk, 7);
|
|
msgpack_pack_str_body(&pk, "example", 7);
|
|
|
|
/* deserialize the buffer into msgpack_object instance. */
|
|
/* deserialized object is valid during the msgpack_zone instance alive. */
|
|
msgpack_zone mempool;
|
|
msgpack_zone_init(&mempool, 2048);
|
|
|
|
msgpack_object deserialized;
|
|
msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);
|
|
|
|
/* print the deserialized object. */
|
|
msgpack_object_print(stdout, deserialized);
|
|
puts("");
|
|
|
|
msgpack_zone_destroy(&mempool);
|
|
msgpack_sbuffer_destroy(&sbuf);
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
See [`QUICKSTART-C.md`](./QUICKSTART-C.md) for more details.
|
|
|
|
In C++:
|
|
|
|
```c++
|
|
#include <msgpack.hpp>
|
|
#include <string>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
int main(void)
|
|
{
|
|
msgpack::type::tuple<int, bool, std::string> src(1, true, "example");
|
|
|
|
// serialize the object into the buffer.
|
|
// any classes that implements write(const char*,size_t) can be a buffer.
|
|
std::stringstream buffer;
|
|
msgpack::pack(buffer, src);
|
|
|
|
// send the buffer ...
|
|
buffer.seekg(0);
|
|
|
|
// deserialize the buffer into msgpack::object instance.
|
|
std::string str(buffer.str());
|
|
|
|
msgpack::unpacked result;
|
|
|
|
msgpack::unpack(result, str.data(), str.size());
|
|
|
|
// deserialized object is valid during the msgpack::unpacked instance alive.
|
|
msgpack::object deserialized = result.get();
|
|
|
|
// msgpack::object supports ostream.
|
|
std::cout << deserialized << std::endl;
|
|
|
|
// convert msgpack::object instance into the original type.
|
|
// if the type is mismatched, it throws msgpack::type_error exception.
|
|
msgpack::type::tuple<int, bool, std::string> dst;
|
|
deserialized.convert(dst);
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
See [`QUICKSTART-CPP.md`](./QUICKSTART-CPP.md) for more details.
|
|
|
|
Usage
|
|
-----
|
|
|
|
### C++ Header Only Library
|
|
|
|
When you use msgpack on C++03 and C++11, you can just add
|
|
msgpack-c/include to your include path:
|
|
|
|
g++ -I msgpack-c/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_source_file.cpp
|
|
|
|
See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
|
|
|
|
If you want to use C version of msgpack, you need to build it. You can
|
|
also install the C and C++ versions of msgpack.
|
|
|
|
### Building and Installing
|
|
|
|
#### Install from git repository
|
|
|
|
##### Using autotools
|
|
|
|
You will need:
|
|
|
|
- `gcc >= 4.1.0` or `clang >= 3.3.0`
|
|
- `autoconf >= 2.60`
|
|
- `automake >= 1.10`
|
|
- `libtool >= 2.2.4`
|
|
|
|
The build steps below are for C and C++03. If compiling for C++11,
|
|
add `-std=c++11` to the environmental variable `CXXFLAGS` with
|
|
`export CXXFLAGS="$CXXFLAGS -std=c++11"` prior to following the
|
|
directions below.
|
|
|
|
```bash
|
|
$ git clone https://github.com/msgpack/msgpack-c
|
|
$ cd msgpack-c
|
|
$ ./bootstrap
|
|
$ ./configure
|
|
$ make
|
|
```
|
|
|
|
You can install the resulting library like this:
|
|
|
|
```bash
|
|
$ sudo make install
|
|
```
|
|
##### Using cmake
|
|
|
|
###### Using the Terminal (CLI)
|
|
|
|
You will need:
|
|
|
|
- `gcc >= 4.1.0`
|
|
- `cmake >= 2.8.0`
|
|
|
|
C and C++03:
|
|
|
|
$ git clone https://github.com/msgpack/msgpack-c.git
|
|
$ cd msgpack-c
|
|
$ cmake .
|
|
$ make
|
|
$ sudo make install
|
|
|
|
If you want to setup C++11 version of msgpack instead,
|
|
execute the following commands:
|
|
|
|
$ git clone https://github.com/msgpack/msgpack-c.git
|
|
$ cd msgpack-c
|
|
$ cmake -DMSGPACK_CXX11=ON .
|
|
$ sudo make install
|
|
|
|
##### GUI on Windows
|
|
|
|
Clone msgpack-c git repository.
|
|
|
|
$ git clone https://github.com/msgpack/msgpack-c.git
|
|
|
|
or using GUI git client.
|
|
|
|
e.g.) tortoise git https://code.google.com/p/tortoisegit/
|
|
|
|
1. Launch [cmake GUI client](http://www.cmake.org/cmake/resources/software.html).
|
|
|
|
2. Set 'Where is the source code:' text box and 'Where to build
|
|
the binaries:' text box.
|
|
|
|
3. Click 'Configure' button.
|
|
|
|
4. Choose your Visual Studio version.
|
|
|
|
5. Click 'Generate' button.
|
|
|
|
6. Open the created msgpack.sln on Visual Studio.
|
|
|
|
7. Build all.
|
|
|
|
### Documentation
|
|
|
|
You can get addtional information on the
|
|
[wiki](https://github.com/msgpack/msgpack-c/wiki).
|
|
|
|
Contributing
|
|
------------
|
|
|
|
`msgpack-c` is developed on GitHub at [msgpack/msgpack-c](https://github.com/msgpack/msgpack-c).
|
|
To report an issue or send a pull request, use the
|
|
[issue tracker](https://github.com/msgpack/msgpack-c/issues).
|
|
|
|
Here's the list of [great contributors](https://github.com/msgpack/msgpack-c/graphs/contributors).
|
|
|
|
License
|
|
-------
|
|
|
|
`msgpack-c` is licensed under the Boost Software License, Version 1.0. See
|
|
the [`LICENSE_1_0.txt`](./LICENSE_1_0.txt) file for details.
|