Changeset 18599 for lang/c/msgpack

Show
Ignore:
Timestamp:
09/02/08 00:08:33 (5 years ago)
Author:
frsyuki
Message:

lang/c/msgpack: added C++ binding

Location:
lang/c/msgpack/trunk
Files:
10 added
4 removed
3 modified

Legend:

Unmodified
Added
Removed
  • lang/c/msgpack/trunk/msgpack/pack/inline_impl.h

    r17708 r18599  
    2424#ifdef __LITTLE_ENDIAN__ 
    2525 
    26 #define STORE_16(d) \ 
     26#define STORE_BE16(d) \ 
    2727        ((char*)&d)[1], ((char*)&d)[0] 
    2828 
    29 #define STORE_32(d) \ 
     29#define STORE_BE32(d) \ 
    3030        ((char*)&d)[3], ((char*)&d)[2], ((char*)&d)[1], ((char*)&d)[0] 
    3131 
    32 #define STORE_64(d) \ 
     32#define STORE_BE64(d) \ 
    3333        ((char*)&d)[7], ((char*)&d)[6], ((char*)&d)[5], ((char*)&d)[4], \ 
    3434        ((char*)&d)[3], ((char*)&d)[2], ((char*)&d)[1], ((char*)&d)[0] 
     
    3636#elif __BIG_ENDIAN__ 
    3737 
    38 #define STORE_16(d) \ 
    39         ((char*)&d)[2], ((char*)&d)[3] 
    40  
    41 #define STORE_32(d) \ 
     38#define STORE_BE16(d) \ 
     39        ((char*)&d)[0], ((char*)&d)[1] 
     40 
     41#define STORE_BE32(d) \ 
    4242        ((char*)&d)[0], ((char*)&d)[1], ((char*)&d)[2], ((char*)&d)[3] 
    4343 
    44 #define STORE_32(d) \ 
     44#define STORE_BE64(d) \ 
    4545        ((char*)&d)[0], ((char*)&d)[1], ((char*)&d)[2], ((char*)&d)[3], \ 
    4646        ((char*)&d)[4], ((char*)&d)[5], ((char*)&d)[6], ((char*)&d)[7] 
     
    5858        if(d < -32) { 
    5959                if(d < -32768) { // signed 32 
    60                         const unsigned char buf[5] = {0xd2, STORE_32(d)}; 
     60                        const unsigned char buf[5] = {0xd2, STORE_BE32(d)}; 
    6161                        msgpack_pack_append_buffer(x, buf, 5); 
    6262                } else if(d < -128) { // signed 16 
    63                         const unsigned char buf[3] = {0xd1, STORE_16(d)}; 
     63                        const unsigned char buf[3] = {0xd1, STORE_BE16(d)}; 
    6464                        msgpack_pack_append_buffer(x, buf, 3); 
    6565                } else { // signed 8 
     
    7676                } else if(d < 65536) { 
    7777                        // unsigned 16 
    78                         const unsigned char buf[3] = {0xcd, STORE_16(d)}; 
     78                        const unsigned char buf[3] = {0xcd, STORE_BE16(d)}; 
    7979                        msgpack_pack_append_buffer(x, buf, 3); 
    8080                } else { 
    8181                        // unsigned 32 
    82                         const unsigned char buf[5] = {0xce, STORE_32(d)}; 
     82                        const unsigned char buf[5] = {0xce, STORE_BE32(d)}; 
    8383                        msgpack_pack_append_buffer(x, buf, 5); 
    8484                } 
     
    9898        } else if(d < 65536) { 
    9999                // unsigned 16 
    100                 const unsigned char buf[3] = {0xcd, STORE_16(d)}; 
     100                const unsigned char buf[3] = {0xcd, STORE_BE16(d)}; 
    101101                msgpack_pack_append_buffer(x, buf, 3); 
    102102        } else { 
    103103                // unsigned 32 
    104                 const unsigned char buf[5] = {0xce, STORE_32(d)}; 
     104                const unsigned char buf[5] = {0xce, STORE_BE32(d)}; 
    105105                msgpack_pack_append_buffer(x, buf, 5); 
    106106        } 
     
    119119inline void msgpack_pack_unsigned_int_16(msgpack_pack_context x, uint16_t d) 
    120120{ 
    121         const unsigned char buf[3] = {0xcd, STORE_16(d)}; 
     121        const unsigned char buf[3] = {0xcd, STORE_BE16(d)}; 
    122122        msgpack_pack_append_buffer(x, buf, 3); 
    123123} 
     
    125125inline void msgpack_pack_unsigned_int_32(msgpack_pack_context x, uint32_t d) 
    126126{ 
    127         const unsigned char buf[5] = {0xce, STORE_32(d)}; 
     127        const unsigned char buf[5] = {0xce, STORE_BE32(d)}; 
    128128        msgpack_pack_append_buffer(x, buf, 5); 
    129129} 
     
    131131inline void msgpack_pack_unsigned_int_64(msgpack_pack_context x, uint64_t d) 
    132132{ 
    133         // FIXME 
    134         const unsigned char buf[9] = {0xcf, STORE_64(d)}; 
     133        // FIXME optimization 
     134        const unsigned char buf[9] = {0xcf, STORE_BE64(d)}; 
    135135        msgpack_pack_append_buffer(x, buf, 9); 
    136136} 
     
    150150inline void msgpack_pack_signed_int_16(msgpack_pack_context x, int16_t d) 
    151151{ 
    152         const unsigned char buf[3] = {0xd1, STORE_16(d)}; 
     152        const unsigned char buf[3] = {0xd1, STORE_BE16(d)}; 
    153153        msgpack_pack_append_buffer(x, buf, 3); 
    154154} 
     
    156156inline void msgpack_pack_signed_int_32(msgpack_pack_context x, int32_t d) 
    157157{ 
    158         const unsigned char buf[5] = {0xd2, STORE_32(d)}; 
     158        const unsigned char buf[5] = {0xd2, STORE_BE32(d)}; 
    159159        msgpack_pack_append_buffer(x, buf, 5); 
    160160} 
     
    162162inline void msgpack_pack_signed_int_64(msgpack_pack_context x, int64_t d) 
    163163{ 
    164         // FIXME 
    165         const unsigned char buf[9] = {0xd3, STORE_64(d)}; 
     164        // FIXME optimization 
     165        const unsigned char buf[9] = {0xd3, STORE_BE64(d)}; 
    166166        msgpack_pack_append_buffer(x, buf, 9); 
    167167} 
     
    175175{ 
    176176        uint32_t n = *((uint32_t*)&d);  // FIXME 
    177         const unsigned char buf[5] = {0xca, STORE_32(n)}; 
     177        const unsigned char buf[5] = {0xca, STORE_BE32(n)}; 
    178178        msgpack_pack_append_buffer(x, buf, 5); 
    179179} 
     
    182182{ 
    183183        uint64_t n = *((uint64_t*)&d);  // FIXME 
    184         const unsigned char buf[9] = {0xcb, STORE_64(n)}; 
     184        const unsigned char buf[9] = {0xcb, STORE_BE64(n)}; 
    185185        msgpack_pack_append_buffer(x, buf, 9); 
    186186} 
     
    201201 * Boolean 
    202202 */ 
     203 
    203204inline void msgpack_pack_true(msgpack_pack_context x) 
    204205{ 
     
    225226        } else if(n < 65536) { 
    226227                uint16_t d = (uint16_t)n; 
    227                 unsigned char buf[3] = {0xdc, STORE_16(d)}; 
     228                unsigned char buf[3] = {0xdc, STORE_BE16(d)}; 
    228229                msgpack_pack_append_buffer(x, buf, 3); 
    229230        } else { 
    230231                uint32_t d = (uint32_t)n; 
    231                 unsigned char buf[5] = {0xdd, STORE_32(d)}; 
     232                unsigned char buf[5] = {0xdd, STORE_BE32(d)}; 
    232233                msgpack_pack_append_buffer(x, buf, 5); 
    233234        } 
     
    246247        } else if(n < 65536) { 
    247248                uint16_t d = (uint16_t)n; 
    248                 unsigned char buf[3] = {0xde, STORE_16(d)}; 
     249                unsigned char buf[3] = {0xde, STORE_BE16(d)}; 
    249250                msgpack_pack_append_buffer(x, buf, 3); 
    250251        } else { 
    251252                uint32_t d = (uint32_t)n; 
    252                 unsigned char buf[5] = {0xdf, STORE_32(d)}; 
    253                 msgpack_pack_append_buffer(x, buf, 5); 
    254         } 
    255 } 
    256  
    257  
    258 /* 
    259  * String 
     253                unsigned char buf[5] = {0xdf, STORE_BE32(d)}; 
     254                msgpack_pack_append_buffer(x, buf, 5); 
     255        } 
     256} 
     257 
     258 
     259/* 
     260 * Raw 
    260261 */ 
    261262 
     
    273274        } else if(l < 65536) { 
    274275                uint16_t d = (uint16_t)l; 
    275                 unsigned char buf[3] = {0xda, STORE_16(d)}; 
     276                unsigned char buf[3] = {0xda, STORE_BE16(d)}; 
    276277                msgpack_pack_append_buffer(x, buf, 3); 
    277278        } else { 
    278279                uint32_t d = (uint32_t)l; 
    279                 unsigned char buf[5] = {0xdb, STORE_32(d)}; 
     280                unsigned char buf[5] = {0xdb, STORE_BE32(d)}; 
    280281                msgpack_pack_append_buffer(x, buf, 5); 
    281282        } 
     
    284285 
    285286 
     287#undef STORE_BE16(d) 
     288#undef STORE_BE32(d) 
     289#undef STORE_BE64(d) 
     290 
     291 
    286292#endif /* msgpack/pack/inline_impl.h */ 
    287293 
  • lang/c/msgpack/trunk/msgpack/unpack/inline_context.h

    r17708 r18599  
    2626#endif 
    2727 
     28#ifdef __cplusplus 
     29extern "C" { 
     30#endif 
     31 
    2832typedef struct { 
    2933        msgpack_object obj; 
     
    4852#define msgpack_unpacker_data(unpacker) (unpacker)->stack[0].obj 
    4953 
     54#ifdef __cplusplus 
     55} 
     56#endif 
    5057 
    5158#endif /* msgpack/unpack/inline_context.h */ 
  • lang/c/msgpack/trunk/msgpack/unpack/inline_impl.h

    r17708 r18599  
    2323#include <arpa/inet.h> 
    2424/*#include <stdio.h>*/ 
     25 
     26#ifdef __cplusplus 
     27extern "C" { 
     28#endif 
    2529 
    2630// Positive FixNum  0xxxxxxx  0x00 - 0x7f 
     
    7276#endif 
    7377 
    74 static inline uint64_t ntohll(uint64_t x) { 
    75 #ifdef __LITTLE_ENDIAN__  // FIXME 
     78#define betoh16(x) ntohs(x) 
     79#define betoh32(x) ntohl(x) 
     80 
     81#ifdef __LITTLE_ENDIAN__ 
    7682#if defined(__bswap_64) 
    77         return __bswap_64(x); 
     83#  define betoh64(x) __bswap_64(x) 
    7884#elif defined(__DARWIN_OSSwapInt64) 
    79         return __DARWIN_OSSwapInt64(x); 
     85#  define betoh64(x) __DARWIN_OSSwapInt64(x) 
    8086#else 
     87static inline uint64_t betoh64(uint64_t x) { 
    8188        return  ((x << 56) & 0xff00000000000000ULL ) | 
    8289                        ((x << 40) & 0x00ff000000000000ULL ) | 
     
    8794                        ((x >> 40) & 0x000000000000ff00ULL ) | 
    8895                        ((x >> 56) & 0x00000000000000ffULL ) ; 
     96} 
    8997#endif 
    9098#else 
    91         return x; 
    92 #endif 
    93 } 
     99#define betoh64(x) (x) 
     100#endif 
     101 
    94102 
    95103typedef enum { 
     
    213221 
    214222#define PTR_CAST_8(ptr)   (*(uint8_t*)ptr) 
    215 #define PTR_CAST_16(ptr)  ntohs(*(uint16_t*)ptr) 
    216 #define PTR_CAST_32(ptr)  ntohl(*(uint32_t*)ptr) 
    217 #define PTR_CAST_64(ptr)  ntohll(*(uint64_t*)ptr) 
     223#define PTR_CAST_16(ptr)  betoh16(*(uint16_t*)ptr) 
     224#define PTR_CAST_32(ptr)  betoh32(*(uint32_t*)ptr) 
     225#define PTR_CAST_64(ptr)  betoh64(*(uint64_t*)ptr) 
    218226 
    219227        if(p == pe) { goto _out; } 
     
    435443 
    436444 
     445#ifdef betoh16(x) 
     446#undef betoh16(x) 
     447#endif 
     448 
     449#ifdef betoh32(x) 
     450#undef betoh32(x) 
     451#endif 
     452 
     453#ifdef betoh64(x) 
     454#undef betoh64(x) 
     455#endif 
     456 
     457#ifdef __cplusplus 
     458} 
     459#endif 
     460 
    437461#endif /* msgpack/unpack/inline_impl.h */ 
    438462