summaryrefslogtreecommitdiff
path: root/msgpack/pack_template.h
diff options
context:
space:
mode:
authorAntonio Cuni <anto.cuni@gmail.com>2013-10-18 17:33:54 +0200
committerAntonio Cuni <anto.cuni@gmail.com>2013-10-18 17:33:54 +0200
commit5467515065b95496b9f5b9d842ffc73c9ccb806e (patch)
tree27bfb8233e5b8aa63b76492337995578de9ab623 /msgpack/pack_template.h
parentafa28fb2051cb00f03c83e020745e1eb238ff4ac (diff)
downloadmsgpack-python-5467515065b95496b9f5b9d842ffc73c9ccb806e.tar.gz
implement Packer.pack_extended_type also in the cython version of the code
Diffstat (limited to 'msgpack/pack_template.h')
-rw-r--r--msgpack/pack_template.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/msgpack/pack_template.h b/msgpack/pack_template.h
index 9e00d7e..ac9815f 100644
--- a/msgpack/pack_template.h
+++ b/msgpack/pack_template.h
@@ -683,6 +683,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