mirror of
https://github.com/msgpack/msgpack-c
synced 2026-06-08 16:11:40 +00:00
1f5d6b9cac
Removed obsolete unpack functions.
Updated examples that no longer use obsolete functions.
Added reference checking function to unpacked. ( unpacked::referenced() )
Added std:: namespace.
Added reference or copy choice function and default behavior:
When you use unpacker, default behavior is:
STR, BIN, EXT types are always held by reference.
When you don't use unpacker, default behavior is:
STR, BIN, EXT types are always held by copy.
The memory is allocated from zone.
You can customize the behavior passing your custom judging function to unpack() or unpacker's constructor.
107 lines
2.4 KiB
C
107 lines
2.4 KiB
C
/*
|
|
* MessagePack for C dynamic typing routine
|
|
*
|
|
* 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_OBJECT_H
|
|
#define MSGPACK_OBJECT_H
|
|
|
|
#include "zone.h"
|
|
#include <stdio.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/**
|
|
* @defgroup msgpack_object Dynamically typed object
|
|
* @ingroup msgpack
|
|
* @{
|
|
*/
|
|
|
|
typedef enum {
|
|
MSGPACK_OBJECT_NIL = 0x00,
|
|
MSGPACK_OBJECT_BOOLEAN = 0x01,
|
|
MSGPACK_OBJECT_POSITIVE_INTEGER = 0x02,
|
|
MSGPACK_OBJECT_NEGATIVE_INTEGER = 0x03,
|
|
MSGPACK_OBJECT_DOUBLE = 0x04,
|
|
MSGPACK_OBJECT_STR = 0x05,
|
|
MSGPACK_OBJECT_ARRAY = 0x06,
|
|
MSGPACK_OBJECT_MAP = 0x07,
|
|
MSGPACK_OBJECT_BIN = 0x08,
|
|
MSGPACK_OBJECT_EXT = 0x09
|
|
} msgpack_object_type;
|
|
|
|
|
|
struct msgpack_object;
|
|
struct msgpack_object_kv;
|
|
|
|
typedef struct {
|
|
uint32_t size;
|
|
struct msgpack_object* ptr;
|
|
} msgpack_object_array;
|
|
|
|
typedef struct {
|
|
uint32_t size;
|
|
struct msgpack_object_kv* ptr;
|
|
} msgpack_object_map;
|
|
|
|
typedef struct {
|
|
uint32_t size;
|
|
const char* ptr;
|
|
} msgpack_object_str;
|
|
|
|
typedef struct {
|
|
uint32_t size;
|
|
const char* ptr;
|
|
} msgpack_object_bin;
|
|
|
|
typedef union {
|
|
bool boolean;
|
|
uint64_t u64;
|
|
int64_t i64;
|
|
double dec;
|
|
msgpack_object_array array;
|
|
msgpack_object_map map;
|
|
msgpack_object_str str;
|
|
msgpack_object_bin bin;
|
|
} msgpack_object_union;
|
|
|
|
typedef struct msgpack_object {
|
|
msgpack_object_type type;
|
|
msgpack_object_union via;
|
|
} msgpack_object;
|
|
|
|
typedef struct msgpack_object_kv {
|
|
msgpack_object key;
|
|
msgpack_object val;
|
|
} msgpack_object_kv;
|
|
|
|
|
|
void msgpack_object_print(FILE* out, msgpack_object o);
|
|
|
|
bool msgpack_object_equal(const msgpack_object x, const msgpack_object y);
|
|
|
|
/** @} */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* msgpack/object.h */
|
|
|