diff --git a/AUTHORS b/AUTHORS index ababacb0..42c186a1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1 +1,57 @@ -FURUHASHI Sadayuki +Authors in no particular order, as {name, github user, email}: + +Original Author: +Furuhashi Sadayuki frsyuki frsyuki users sourceforge jp + + +Takatoshi Kondo redboltz redboltz gmail com +Fuji Goro gfx gfuji cpan org +Tokuhiro Matsuno tokuhirom - +Inada Naoki methane - +Muga Nishizawa muga - +Hideyuki Tanaka tanakh tanaka hideyuki gmail com +Nobuyuki Kubota nobu-k nobu k jp github gmail com +Makamaka Hannyaharamitu makamaka - +Kazuki Ohta kzk kazuki ohta gmail com +Moriyoshi Koizumi moriyoshi mozo mozo jp +Kazuki Oikawa kazuki k oikw org +- advect - +Damian Gryski dgryski damian gryski com +Taro L. Saito xerial leo xerial org +Haneef Mubarak haneefmubarak - +Thiago de Arruda tarruda - +Jakob Petsovits jpetso jpetso gmx at +Yuto Hayamizu hayamiz y hayamizu gmail com +Vladimir Volodko vvolodko - +Nicolas Despres nicolasdespres nicolas despres gmail com +Dirkjan Bussink dbussink d bussink gmail com +Masahiro Nakagawa repeatedly repeatedly gmail com +Kenichi Aramaki firewood - +Kazuho Oku kazuho kazuho natadeco co +Naoya Watabiki watabiki - +Mizuno Hiroki mzp mzp ocaml jp +Eric Liang ericliang eric l 2046 gmail com +Kouhei Sutou kou kou clear code com +Dror Levin spatz - +Keiji Muraishi kjim keiji muraishi gmail com +- tbeu - +Hans Duedal duedal hd onlinecity dk +Paul Colomiets tailhook - +Uli Kohler ulikoehler ukoehloer btronik de +Jens Alfke snej - +Norio Kobota nori0428 nori 0428 gmail com +Hong Wu xunzhang xunzhangthu gmail com +Drew Crawford drewcrawford drew sealedabstract com +- mogemimi - +Watson Song watsonsong watsonsong foxmail com +Felipe Oliveira Carvalho philix felipekde gmail com +- claws - +- xanxys - +Daiki Ueno ueno - +- shafik - +Brian Shirai brixen brixen gmail com +Scott Prager splinterofchaos splinterofchaos gmail com +Brian Ketelsen bketelsen bketelsen gmail com +Hideyuki Takei hideyuki takehide22 gmail com +- bajamircea - +- cho45 cho45 lowreal net diff --git a/ChangeLog b/CHANGELOG.md similarity index 100% rename from ChangeLog rename to CHANGELOG.md diff --git a/README_crosslang.md b/CROSSLANG.md similarity index 100% rename from README_crosslang.md rename to CROSSLANG.md diff --git a/NOTICE b/NOTICE deleted file mode 100644 index e706f2ab..00000000 --- a/NOTICE +++ /dev/null @@ -1,4 +0,0 @@ -MessagePack is developed by FURUHASHI Sadayuki, licensed under Apache License, -Version 2.0. The original software and related information is available at -http://msgpack.sourceforge.jp/. - diff --git a/README.md b/README.md index 934bd148..af38fa14 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,163 @@ -# Msgpack for C/C++ +`msgpack` for C/C++ +=================== + +Version 0.5.9 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) It's like JSON but small and fast. +Overview +-------- -## 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. -MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves. +Example +------- +In C: -## License +```c +#include +#include -Msgpack is Copyright (C) 2008-2014 FURUHASHI Sadayuki and licensed under the Apache License, Version 2.0 (the "License"). For details see the `COPYING` file in this directory. +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); -## Contributing + 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); -The source for msgpack-c is held at [msgpack-c](https://github.com/msgpack/msgpack-c) github.com site. + /* 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); -To report an issue, use the [msgpack-c issue tracker](https://github.com/msgpack/msgpack-c/issues) at github.com. + msgpack_object deserialized; + msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized); -## Version -0.5.9 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) + /* print the deserialized object. */ + msgpack_object_print(stdout, deserialized); + puts(""); -## Using Msgpack + msgpack_zone_destroy(&mempool); + msgpack_sbuffer_destroy(&sbuf); -### Header only library for C++ -When you use msgpack on C++03 and C++11, you just add msgpack-c/include to your include path. You don't need to link any msgpack libraries. + return 0; +} +``` -e.g.) +See [`QUICKSTART-C.md`](./QUICKSTART-C.md) for more details. + +In C++: + +```c++ +#include +#include +#include +#include + +int main(void) +{ + msgpack::type::tuple 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 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 your_source_file.cpp -If you want to use C version of msgpack, you need to build it. You can also install C and C++ version of msgpack. +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 higher), autotools. -For C: -C++03 and C: +You will need: - $ git clone https://github.com/redboltz/msgpack-c/tree/cxx_separate - $ cd msgpack-c - $ ./bootstrap - $ ./configure - $ make - $ sudo make install + - `gcc >= 4.1.0` or `clang >= 3.3.0` + - `autoconf >= 2.60` + - `automake >= 1.10` + - `libtool >= 2.2.4` -For C++11: +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. - $ git clone https://github.com/msgpack/msgpack-c.git - $ cd msgpack-c - $ ./bootstrap - $ ./configure CXXFLAGS="-std=c++11" - $ make - $ sudo make install +```bash +$ git clone https://github.com/msgpack/msgpack-c +$ cd msgpack-c +$ ./bootstrap +$ ./configure +$ make +``` -You need the compiler that fully supports C++11. +You can install the resulting library like this: +```bash +$ sudo make install +``` ##### Using cmake -###### CUI +###### Using the Terminal (CLI) -You will need gcc (4.1.0 or higher), cmake. +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 @@ -73,15 +165,14 @@ You will need gcc (4.1.0 or higher), cmake. $ make $ sudo make install -If you want to setup C++11 version of msgpack, execute the following command: +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 -You need the compiler that fully supports C++11. - ##### GUI on Windows Clone msgpack-c git repository. @@ -92,56 +183,35 @@ 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 +1. Launch [cmake GUI client](http://www.cmake.org/cmake/resources/software.html). -1. Set 'Where is the source code:' text box and 'Where to build the binaries:' text box. +2. Set 'Where is the source code:' text box and 'Where to build +the binaries:' text box. -1. Click 'Configure' button. +3. Click 'Configure' button. -1. Choose your Visual Studio version. +4. Choose your Visual Studio version. -1. Click 'Generate' button. +5. Click 'Generate' button. -1. Open the created msgpack.sln on Visual Studio. +6. Open the created msgpack.sln on Visual Studio. -1. Build all. +7. Build all. -### Code Example +### Documentation - #include - #include - #include - #include +You can get addtional information on the +[wiki](https://github.com/msgpack/msgpack-c/wiki/cpp_overview). - int main() { - // This is target object. - std::vector target; - target.push_back("Hello,"); - target.push_back("World!"); +Contributing +------------ - // Serialize it. - msgpack::sbuffer sbuf; // simple buffer - msgpack::pack(&sbuf, target); +`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). - // Deserialize the serialized data. - msgpack::unpacked msg; // includes memory pool and deserialized object - msgpack::unpack(msg, sbuf.data(), sbuf.size()); - msgpack::object obj = msg.get(); - - // Print the deserialized object to stdout. - std::cout << obj << std::endl; // ["Hello," "World!"] - - // Convert the deserialized object to staticaly typed object. - std::vector result; - obj.convert(&result); - - // If the type is mismatched, it throws msgpack::type_error. - obj.as(); // type is mismatched, msgpack::type_error is thrown - } - -### Documents - -You can get addtional information on the wiki: - -https://github.com/msgpack/msgpack-c/wiki/cpp_overview +License +------- +`msgpack-c` is licensed under the Apache License Version 2.0. See +the [`LICENSE`](./LICENSE) file for details.