diff options
| author | INADA Naoki <inada-n@klab.com> | 2013-10-20 15:08:31 +0900 |
|---|---|---|
| committer | INADA Naoki <inada-n@klab.com> | 2013-10-20 15:08:31 +0900 |
| commit | 27f0cba8a5f36393517ee85d2c339847b76e0c6b (patch) | |
| tree | 470bc84905240c82d2e1f4e710d55a288661f635 /msgpack/pack_template.h | |
| parent | 7123341ca89a9a3afee8521cc16a1a419ea8871e (diff) | |
| parent | 6386481024ec045d9ef991a2c975902276812508 (diff) | |
| download | msgpack-python-27f0cba8a5f36393517ee85d2c339847b76e0c6b.tar.gz | |
Merge branch 'master' of https://github.com/antocuni/msgpack-python into newspec
Conflicts:
msgpack/fallback.py
msgpack/unpack.h
msgpack/unpack_define.h
msgpack/unpack_template.h
Diffstat (limited to 'msgpack/pack_template.h')
| -rw-r--r-- | msgpack/pack_template.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/msgpack/pack_template.h b/msgpack/pack_template.h index d228d7a..0fe9514 100644 --- a/msgpack/pack_template.h +++ b/msgpack/pack_template.h @@ -708,6 +708,66 @@ static inline int msgpack_pack_raw_body(msgpack_packer* x, const void* b, size_t msgpack_pack_append_buffer(x, (const unsigned char*)b, l); } +/* + * Ext + */ + +static inline int msgpack_pack_ext(msgpack_packer* x, int8_t typecode, size_t l) +{ + if (l == 1) { + unsigned char buf[2]; + buf[0] = 0xd4; + buf[1] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 2); + } + else if(l == 2) { + unsigned char buf[2]; + buf[0] = 0xd5; + buf[1] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 2); + } + else if(l == 4) { + unsigned char buf[2]; + buf[0] = 0xd6; + buf[1] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 2); + } + else if(l == 8) { + unsigned char buf[2]; + buf[0] = 0xd7; + buf[1] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 2); + } + else if(l == 16) { + unsigned char buf[2]; + buf[0] = 0xd8; + buf[1] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 2); + } + else if(l < 256) { + unsigned char buf[3]; + buf[0] = 0xc7; + buf[1] = l; + buf[2] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 3); + } else if(l < 65536) { + unsigned char buf[4]; + buf[0] = 0xc8; + _msgpack_store16(&buf[1], (uint16_t)l); + buf[3] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 4); + } else { + unsigned char buf[6]; + buf[0] = 0xc9; + _msgpack_store32(&buf[1], (uint32_t)l); + buf[5] = (unsigned char)typecode; + msgpack_pack_append_buffer(x, buf, 6); + } + +} + + + #undef msgpack_pack_append_buffer #undef TAKE8_8 |
