mirror of
				https://github.com/msgpack/msgpack-c.git
				synced 2025-11-03 19:40:38 +01:00 
			
		
		
		
	add msgpack/sysdep.h
This commit is contained in:
		@@ -8,5 +8,6 @@ nobase_include_HEADERS = \
 | 
			
		||||
		msgpack/pack_define.h \
 | 
			
		||||
		msgpack/pack_template.h \
 | 
			
		||||
		msgpack/unpack_define.h \
 | 
			
		||||
		msgpack/unpack_template.h
 | 
			
		||||
		msgpack/unpack_template.h \
 | 
			
		||||
		msgpack/sysdep.h
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
#define MSGPACK_OBJECT_H__
 | 
			
		||||
 | 
			
		||||
#include "msgpack/zone.h"
 | 
			
		||||
#include "msgpack/sys.h"
 | 
			
		||||
#include "msgpack/sysdep.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								c/unpack.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								c/unpack.c
									
									
									
									
									
								
							@@ -141,48 +141,31 @@ static inline int template_callback_raw(unpack_user* u, const char* b, const cha
 | 
			
		||||
#define CTX_CAST(m) ((template_context*)(m))
 | 
			
		||||
#define CTX_REFERENCED(mpac) CTX_CAST((mpac)->ctx)->user.referenced
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
typedef unsigned int counter_t;
 | 
			
		||||
#else
 | 
			
		||||
typedef long counter_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define COUNTER_SIZE (sizeof(volatile counter_t))
 | 
			
		||||
#define COUNTER_SIZE (sizeof(_msgpack_atomic_counter_t))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static inline void init_count(void* buffer)
 | 
			
		||||
{
 | 
			
		||||
	*(volatile counter_t*)buffer = 1;
 | 
			
		||||
	*(volatile _msgpack_atomic_counter_t*)buffer = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void decl_count(void* buffer)
 | 
			
		||||
{
 | 
			
		||||
	// atomic if(--*(counter_t*)buffer == 0) { free(buffer); }
 | 
			
		||||
	if(
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
		__sync_sub_and_fetch((counter_t*)buffer, 1) == 0
 | 
			
		||||
#else
 | 
			
		||||
		InterlockedDecrement((volatile counter_t*)&buffer) == 0
 | 
			
		||||
#endif
 | 
			
		||||
			) {
 | 
			
		||||
	// atomic if(--*(_msgpack_atomic_counter_t*)buffer == 0) { free(buffer); }
 | 
			
		||||
	if(_msgpack_sync_decr_and_fetch((volatile _msgpack_atomic_counter_t*)buffer)) {
 | 
			
		||||
		free(buffer);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void incr_count(void* buffer)
 | 
			
		||||
{
 | 
			
		||||
	// atomic ++*(counter_t*)buffer;
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
	__sync_add_and_fetch((counter_t*)buffer, 1);
 | 
			
		||||
#else
 | 
			
		||||
	InterlockedIncrement((volatile counter_t*)&buffer);
 | 
			
		||||
#endif
 | 
			
		||||
	// atomic ++*(_msgpack_atomic_counter_t*)buffer;
 | 
			
		||||
	_msgpack_sync_incr_and_fetch((volatile _msgpack_atomic_counter_t*)buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline counter_t get_count(void* buffer)
 | 
			
		||||
static inline _msgpack_atomic_counter_t get_count(void* buffer)
 | 
			
		||||
{
 | 
			
		||||
	return *(volatile counter_t*)buffer;
 | 
			
		||||
	return *(volatile _msgpack_atomic_counter_t*)buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
AC_INIT(msgpack/unpack_template.h)
 | 
			
		||||
AC_CONFIG_AUX_DIR(ac)
 | 
			
		||||
AM_INIT_AUTOMAKE(msgpack, 0.3.8)
 | 
			
		||||
AM_INIT_AUTOMAKE(msgpack, 0.3.9)
 | 
			
		||||
AC_CONFIG_HEADER(config.h)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(CFLAGS)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
#ifndef MSGPACK_PACK_DEFINE_H__
 | 
			
		||||
#define MSGPACK_PACK_DEFINE_H__
 | 
			
		||||
 | 
			
		||||
#include "msgpack/sys.h"
 | 
			
		||||
#include "msgpack/sysdep.h"
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
 | 
			
		||||
#endif /* msgpack/pack_define.h */
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ do { \
 | 
			
		||||
	} else { \
 | 
			
		||||
		/* unsigned 16 */ \
 | 
			
		||||
		unsigned char buf[3]; \
 | 
			
		||||
		buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
		buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
@@ -89,12 +89,12 @@ do { \
 | 
			
		||||
		if(d < (1<<16)) { \
 | 
			
		||||
			/* unsigned 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* unsigned 32 */ \
 | 
			
		||||
			unsigned char buf[5]; \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
		} \
 | 
			
		||||
	} \
 | 
			
		||||
@@ -115,17 +115,17 @@ do { \
 | 
			
		||||
		if(d < (1ULL<<16)) { \
 | 
			
		||||
			/* signed 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} else if(d < (1ULL<<32)) { \
 | 
			
		||||
			/* signed 32 */ \
 | 
			
		||||
			unsigned char buf[5]; \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* signed 64 */ \
 | 
			
		||||
			unsigned char buf[9]; \
 | 
			
		||||
			buf[0] = 0xcf; *(uint64_t*)&buf[1] = msgpack_be64(d); \
 | 
			
		||||
			buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 9); \
 | 
			
		||||
		} \
 | 
			
		||||
	} \
 | 
			
		||||
@@ -149,7 +149,7 @@ do { \
 | 
			
		||||
		if(d < -(1<<7)) { \
 | 
			
		||||
			/* signed 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xd1; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* signed 8 */ \
 | 
			
		||||
@@ -167,7 +167,7 @@ do { \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* unsigned 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} \
 | 
			
		||||
	} \
 | 
			
		||||
@@ -179,12 +179,12 @@ do { \
 | 
			
		||||
		if(d < -(1<<15)) { \
 | 
			
		||||
			/* signed 32 */ \
 | 
			
		||||
			unsigned char buf[5]; \
 | 
			
		||||
			buf[0] = 0xd2; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
			buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
		} else if(d < -(1<<7)) { \
 | 
			
		||||
			/* signed 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xd1; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* signed 8 */ \
 | 
			
		||||
@@ -202,12 +202,12 @@ do { \
 | 
			
		||||
		} else if(d < (1<<16)) { \
 | 
			
		||||
			/* unsigned 16 */ \
 | 
			
		||||
			unsigned char buf[3]; \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
			buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
		} else { \
 | 
			
		||||
			/* unsigned 32 */ \
 | 
			
		||||
			unsigned char buf[5]; \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
			buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
			msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
		} \
 | 
			
		||||
	} \
 | 
			
		||||
@@ -220,19 +220,19 @@ do { \
 | 
			
		||||
			if(d < -(1LL<<31)) { \
 | 
			
		||||
				/* signed 64 */ \
 | 
			
		||||
				unsigned char buf[9]; \
 | 
			
		||||
				buf[0] = 0xd3; *(uint64_t*)&buf[1] = msgpack_be64(d); \
 | 
			
		||||
				buf[0] = 0xd3; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 9); \
 | 
			
		||||
			} else { \
 | 
			
		||||
				/* signed 32 */ \
 | 
			
		||||
				unsigned char buf[5]; \
 | 
			
		||||
				buf[0] = 0xd2; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
				buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
			} \
 | 
			
		||||
		} else { \
 | 
			
		||||
			if(d < -(1<<7)) { \
 | 
			
		||||
				/* signed 16 */ \
 | 
			
		||||
				unsigned char buf[3]; \
 | 
			
		||||
				buf[0] = 0xd1; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
				buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
			} else { \
 | 
			
		||||
				/* signed 8 */ \
 | 
			
		||||
@@ -252,19 +252,19 @@ do { \
 | 
			
		||||
			} else { \
 | 
			
		||||
				/* unsigned 16 */ \
 | 
			
		||||
				unsigned char buf[3]; \
 | 
			
		||||
				buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d); \
 | 
			
		||||
				buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 3); \
 | 
			
		||||
			} \
 | 
			
		||||
		} else { \
 | 
			
		||||
			if(d < (1LL<<32)) { \
 | 
			
		||||
				/* unsigned 32 */ \
 | 
			
		||||
				unsigned char buf[5]; \
 | 
			
		||||
				buf[0] = 0xce; *(uint32_t*)&buf[1] = msgpack_be32(d); \
 | 
			
		||||
				buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 5); \
 | 
			
		||||
			} else { \
 | 
			
		||||
				/* unsigned 64 */ \
 | 
			
		||||
				unsigned char buf[9]; \
 | 
			
		||||
				buf[0] = 0xcf; *(uint64_t*)&buf[1] = msgpack_be64(d); \
 | 
			
		||||
				buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
 | 
			
		||||
				msgpack_pack_append_buffer(x, buf, 9); \
 | 
			
		||||
			} \
 | 
			
		||||
		} \
 | 
			
		||||
@@ -283,21 +283,21 @@ msgpack_pack_inline_func_fastint(_uint8)(msgpack_pack_user x, uint8_t d)
 | 
			
		||||
msgpack_pack_inline_func_fastint(_uint16)(msgpack_pack_user x, uint16_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[3];
 | 
			
		||||
	buf[0] = 0xcd; *(uint16_t*)&buf[1] = msgpack_be16(d);
 | 
			
		||||
	buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msgpack_pack_inline_func_fastint(_uint32)(msgpack_pack_user x, uint32_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[5];
 | 
			
		||||
	buf[0] = 0xce; *(uint32_t*)&buf[1] = msgpack_be32(d);
 | 
			
		||||
	buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msgpack_pack_inline_func_fastint(_uint64)(msgpack_pack_user x, uint64_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[9];
 | 
			
		||||
	buf[0] = 0xcf; *(uint64_t*)&buf[1] = msgpack_be64(d);
 | 
			
		||||
	buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 9);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -310,21 +310,21 @@ msgpack_pack_inline_func_fastint(_int8)(msgpack_pack_user x, int8_t d)
 | 
			
		||||
msgpack_pack_inline_func_fastint(_int16)(msgpack_pack_user x, int16_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[3];
 | 
			
		||||
	buf[0] = 0xd1; *(uint16_t*)&buf[1] = msgpack_be16(d);
 | 
			
		||||
	buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msgpack_pack_inline_func_fastint(_int32)(msgpack_pack_user x, int32_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[5];
 | 
			
		||||
	buf[0] = 0xd2; *(uint32_t*)&buf[1] = msgpack_be32(d);
 | 
			
		||||
	buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msgpack_pack_inline_func_fastint(_int64)(msgpack_pack_user x, int64_t d)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char buf[9];
 | 
			
		||||
	buf[0] = 0xd3; *(uint64_t*)&buf[1] = msgpack_be64(d);
 | 
			
		||||
	buf[0] = 0xd3; *(uint64_t*)&buf[1] = _msgpack_be64(d);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 9);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -557,7 +557,7 @@ msgpack_pack_inline_func(_float)(msgpack_pack_user x, float d)
 | 
			
		||||
	union { char buf[4]; uint32_t num; } f;
 | 
			
		||||
	*((float*)&f.buf) = d;  // FIXME
 | 
			
		||||
	unsigned char buf[5];
 | 
			
		||||
	buf[0] = 0xca; *(uint32_t*)&buf[1] = msgpack_be32(f.num);
 | 
			
		||||
	buf[0] = 0xca; *(uint32_t*)&buf[1] = _msgpack_be32(f.num);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -566,7 +566,7 @@ msgpack_pack_inline_func(_double)(msgpack_pack_user x, double d)
 | 
			
		||||
	union { char buf[8]; uint64_t num; } f;
 | 
			
		||||
	*((double*)&f.buf) = d;  // FIXME
 | 
			
		||||
	unsigned char buf[9];
 | 
			
		||||
	buf[0] = 0xcb; *(uint64_t*)&buf[1] = msgpack_be64(f.num);
 | 
			
		||||
	buf[0] = 0xcb; *(uint64_t*)&buf[1] = _msgpack_be64(f.num);
 | 
			
		||||
	msgpack_pack_append_buffer(x, buf, 9);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -610,11 +610,11 @@ msgpack_pack_inline_func(_array)(msgpack_pack_user x, unsigned int n)
 | 
			
		||||
		msgpack_pack_append_buffer(x, &d, 1);
 | 
			
		||||
	} else if(n < 65536) {
 | 
			
		||||
		unsigned char buf[3];
 | 
			
		||||
		buf[0] = 0xdc; *(uint16_t*)&buf[1] = msgpack_be16(n);
 | 
			
		||||
		buf[0] = 0xdc; *(uint16_t*)&buf[1] = _msgpack_be16(n);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 3);
 | 
			
		||||
	} else {
 | 
			
		||||
		unsigned char buf[5];
 | 
			
		||||
		buf[0] = 0xdd; *(uint32_t*)&buf[1] = msgpack_be32(n);
 | 
			
		||||
		buf[0] = 0xdd; *(uint32_t*)&buf[1] = _msgpack_be32(n);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -631,11 +631,11 @@ msgpack_pack_inline_func(_map)(msgpack_pack_user x, unsigned int n)
 | 
			
		||||
		msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
 | 
			
		||||
	} else if(n < 65536) {
 | 
			
		||||
		unsigned char buf[3];
 | 
			
		||||
		buf[0] = 0xde; *(uint16_t*)&buf[1] = msgpack_be16(n);
 | 
			
		||||
		buf[0] = 0xde; *(uint16_t*)&buf[1] = _msgpack_be16(n);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 3);
 | 
			
		||||
	} else {
 | 
			
		||||
		unsigned char buf[5];
 | 
			
		||||
		buf[0] = 0xdf; *(uint32_t*)&buf[1] = msgpack_be32(n);
 | 
			
		||||
		buf[0] = 0xdf; *(uint32_t*)&buf[1] = _msgpack_be32(n);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -652,11 +652,11 @@ msgpack_pack_inline_func(_raw)(msgpack_pack_user x, size_t l)
 | 
			
		||||
		msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
 | 
			
		||||
	} else if(l < 65536) {
 | 
			
		||||
		unsigned char buf[3];
 | 
			
		||||
		buf[0] = 0xda; *(uint16_t*)&buf[1] = msgpack_be16(l);
 | 
			
		||||
		buf[0] = 0xda; *(uint16_t*)&buf[1] = _msgpack_be16(l);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 3);
 | 
			
		||||
	} else {
 | 
			
		||||
		unsigned char buf[5];
 | 
			
		||||
		buf[0] = 0xdb; *(uint32_t*)&buf[1] = msgpack_be32(l);
 | 
			
		||||
		buf[0] = 0xdb; *(uint32_t*)&buf[1] = _msgpack_be32(l);
 | 
			
		||||
		msgpack_pack_append_buffer(x, buf, 5);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										94
									
								
								msgpack/sysdep.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								msgpack/sysdep.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MessagePack system dependencies
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2008-2009 FURUHASHI Sadayuki
 | 
			
		||||
 *
 | 
			
		||||
 *    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 *    you may not use this file except in compliance with the License.
 | 
			
		||||
 *    You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *    See the License for the specific language governing permissions and
 | 
			
		||||
 *    limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MSGPACK_SYSDEP_H__
 | 
			
		||||
#define MSGPACK_SYSDEP_H__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
typedef __int8 int8_t;
 | 
			
		||||
typedef unsigned __int8 uint8_t;
 | 
			
		||||
typedef __int16 int16_t;
 | 
			
		||||
typedef unsigned __int16 uint16_t;
 | 
			
		||||
typedef __int32 int32_t;
 | 
			
		||||
typedef unsigned __int32 uint32_t;
 | 
			
		||||
typedef __int64 int64_t;
 | 
			
		||||
typedef unsigned __int64 uint64_t;
 | 
			
		||||
#else
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
typedef long _msgpack_atomic_counter_t;
 | 
			
		||||
#define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
 | 
			
		||||
#define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
 | 
			
		||||
#else
 | 
			
		||||
typedef unsigned int _msgpack_atomic_counter_t;
 | 
			
		||||
#define _msgpack_sync_decr_and_fetch(ptr) __sync_sub_and_fetch(ptr, 1)
 | 
			
		||||
#define _msgpack_sync_incr_and_fetch(ptr) __sync_add_and_fetch(ptr, 1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <arpa/inet.h>  /* __BYTE_ORDER */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
 | 
			
		||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
 | 
			
		||||
#define __LITTLE_ENDIAN__
 | 
			
		||||
#elif __BYTE_ORDER == __BIG_ENDIAN
 | 
			
		||||
#define __BIG_ENDIAN__
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __LITTLE_ENDIAN__
 | 
			
		||||
 | 
			
		||||
#define _msgpack_be16(x) ntohs(x)
 | 
			
		||||
#define _msgpack_be32(x) ntohl(x)
 | 
			
		||||
 | 
			
		||||
#if defined(_byteswap_uint64)
 | 
			
		||||
#  define _msgpack_be64(x) (_byteswap_uint64(x))
 | 
			
		||||
#elif defined(bswap_64)
 | 
			
		||||
#  define _msgpack_be64(x) bswap_64(x)
 | 
			
		||||
#elif defined(__DARWIN_OSSwapInt64)
 | 
			
		||||
#  define _msgpack_be64(x) __DARWIN_OSSwapInt64(x)
 | 
			
		||||
#else
 | 
			
		||||
#define _msgpack_be64(x) \
 | 
			
		||||
	( ((((uint64_t)x) << 56) & 0xff00000000000000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) <<  8) & 0x000000ff00000000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) >>  8) & 0x00000000ff000000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \
 | 
			
		||||
	  ((((uint64_t)x) >> 56) & 0x00000000000000ffULL ) )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
#define _msgpack_be16(x) (x)
 | 
			
		||||
#define _msgpack_be32(x) (x)
 | 
			
		||||
#define _msgpack_be64(x) (x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* msgpack/sysdep.h */
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
#ifndef MSGPACK_UNPACK_DEFINE_H__
 | 
			
		||||
#define MSGPACK_UNPACK_DEFINE_H__
 | 
			
		||||
 | 
			
		||||
#include "msgpack/sys.h"
 | 
			
		||||
#include "msgpack/sysdep.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 
 | 
			
		||||
@@ -131,9 +131,9 @@ msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const c
 | 
			
		||||
	((unsigned int)*p & 0x1f)
 | 
			
		||||
 | 
			
		||||
#define PTR_CAST_8(ptr)   (*(uint8_t*)ptr)
 | 
			
		||||
#define PTR_CAST_16(ptr)  msgpack_be16(*(uint16_t*)ptr)
 | 
			
		||||
#define PTR_CAST_32(ptr)  msgpack_be32(*(uint32_t*)ptr)
 | 
			
		||||
#define PTR_CAST_64(ptr)  msgpack_be64(*(uint64_t*)ptr)
 | 
			
		||||
#define PTR_CAST_16(ptr)  _msgpack_be16(*(uint16_t*)ptr)
 | 
			
		||||
#define PTR_CAST_32(ptr)  _msgpack_be32(*(uint32_t*)ptr)
 | 
			
		||||
#define PTR_CAST_64(ptr)  _msgpack_be64(*(uint64_t*)ptr)
 | 
			
		||||
 | 
			
		||||
#ifdef USE_CASE_RANGE
 | 
			
		||||
#define SWITCH_RANGE_BEGIN     switch(*p) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user