PX4 Firmware
PX4 Autopilot Software http://px4.io
tinybson.h File Reference

A simple subset SAX-style BSON parser and generator. More...

#include <sys/types.h>
#include <stdint.h>
#include <stdbool.h>
Include dependency graph for tinybson.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  bson_node_s
 Node structure passed to the callback. More...
 
struct  bson_decoder_s
 
struct  bson_encoder_s
 Encoder state structure. More...
 

Macros

#define BSON_MAXNAME   32
 Maximum node name length. More...
 
#define BSON_BUF_INCREMENT   128
 Buffer growth increment when writing to a buffer. More...
 

Typedefs

typedef enum bson_binary_subtype bson_binary_subtype_t
 
typedef struct bson_node_sbson_node_t
 Node structure passed to the callback. More...
 
typedef struct bson_decoder_sbson_decoder_t
 
typedef int(* bson_decoder_callback) (bson_decoder_t decoder, void *priv, bson_node_t node)
 Node callback. More...
 
typedef struct bson_encoder_sbson_encoder_t
 Encoder state structure. More...
 

Enumerations

enum  bson_type_t {
  BSON_EOO = 0, BSON_DOUBLE = 1, BSON_STRING = 2, BSON_OBJECT = 3,
  BSON_ARRAY = 4, BSON_BINDATA = 5, BSON_UNDEFINED = 6, BSON_BOOL = 8,
  BSON_DATE = 9, BSON_nullptr = 10, BSON_INT32 = 16, BSON_INT64 = 18
}
 subset of the BSON node types we might care about More...
 
enum  bson_binary_subtype { BSON_BIN_BINARY = 0, BSON_BIN_USER = 128 }
 

Functions

__EXPORT int bson_decoder_init_file (bson_decoder_t decoder, int fd, bson_decoder_callback callback, void *priv)
 Initialise the decoder to read from a file. More...
 
__EXPORT int bson_decoder_init_buf (bson_decoder_t decoder, void *buf, unsigned bufsize, bson_decoder_callback callback, void *priv)
 Initialise the decoder to read from a buffer in memory. More...
 
__EXPORT int bson_decoder_next (bson_decoder_t decoder)
 Process the next node from the stream and invoke the callback. More...
 
__EXPORT int bson_decoder_copy_data (bson_decoder_t decoder, void *buf)
 Copy node data. More...
 
__EXPORT size_t bson_decoder_data_pending (bson_decoder_t decoder)
 Report copyable data size. More...
 
__EXPORT int bson_encoder_init_file (bson_encoder_t encoder, int fd)
 Initialze the encoder for writing to a file. More...
 
__EXPORT int bson_encoder_init_buf_file (bson_encoder_t encoder, int fd, void *buf, unsigned bufsize)
 Initialze the encoder for writing to a file. More...
 
__EXPORT int bson_encoder_init_buf (bson_encoder_t encoder, void *buf, unsigned bufsize)
 Initialze the encoder for writing to a buffer. More...
 
__EXPORT int bson_encoder_fini (bson_encoder_t encoder)
 Finalise the encoded stream. More...
 
__EXPORT int bson_encoder_buf_size (bson_encoder_t encoder)
 Fetch the size of the encoded object; only valid for buffer operations. More...
 
__EXPORT void * bson_encoder_buf_data (bson_encoder_t encoder)
 Get a pointer to the encoded object buffer. More...
 
__EXPORT int bson_encoder_append_bool (bson_encoder_t encoder, const char *name, bool value)
 Append a boolean to the encoded stream. More...
 
__EXPORT int bson_encoder_append_int (bson_encoder_t encoder, const char *name, int64_t value)
 Append an integer to the encoded stream. More...
 
__EXPORT int bson_encoder_append_double (bson_encoder_t encoder, const char *name, double value)
 Append a double to the encoded stream. More...
 
__EXPORT int bson_encoder_append_string (bson_encoder_t encoder, const char *name, const char *string)
 Append a string to the encoded stream. More...
 
__EXPORT int bson_encoder_append_binary (bson_encoder_t encoder, const char *name, bson_binary_subtype_t subtype, size_t size, const void *data)
 Append a binary blob to the encoded stream. More...
 

Detailed Description

A simple subset SAX-style BSON parser and generator.

See http://bsonspec.org

Some types and defines taken from the standalone BSON parser/generator in the Mongo C connector.

Definition in file tinybson.h.

Macro Definition Documentation

◆ BSON_BUF_INCREMENT

#define BSON_BUF_INCREMENT   128

Buffer growth increment when writing to a buffer.

Definition at line 79 of file tinybson.h.

Referenced by write_x().

◆ BSON_MAXNAME

#define BSON_MAXNAME   32

Maximum node name length.

Definition at line 74 of file tinybson.h.

Referenced by bson_decoder_next(), and write_name().

Typedef Documentation

◆ bson_binary_subtype_t

◆ bson_decoder_callback

typedef int(* bson_decoder_callback) (bson_decoder_t decoder, void *priv, bson_node_t node)

Node callback.

The node callback function's return value is returned by bson_decoder_next.

Definition at line 102 of file tinybson.h.

◆ bson_decoder_t

typedef struct bson_decoder_s* bson_decoder_t

Definition at line 95 of file tinybson.h.

◆ bson_encoder_t

typedef struct bson_encoder_s * bson_encoder_t

Encoder state structure.

◆ bson_node_t

typedef struct bson_node_s * bson_node_t

Node structure passed to the callback.

Enumeration Type Documentation

◆ bson_binary_subtype

Enumerator
BSON_BIN_BINARY 
BSON_BIN_USER 

Definition at line 66 of file tinybson.h.

◆ bson_type_t

subset of the BSON node types we might care about

Enumerator
BSON_EOO 
BSON_DOUBLE 
BSON_STRING 
BSON_OBJECT 
BSON_ARRAY 
BSON_BINDATA 
BSON_UNDEFINED 
BSON_BOOL 
BSON_DATE 
BSON_nullptr 
BSON_INT32 
BSON_INT64 

Definition at line 51 of file tinybson.h.

Function Documentation

◆ bson_decoder_copy_data()

__EXPORT int bson_decoder_copy_data ( bson_decoder_t  decoder,
void *  buf 
)

Copy node data.

Parameters
decoderDecoder state, must have been initialised with bson_decoder_init.

Definition at line 312 of file tinybson.cpp.

References CODER_CHECK, CODER_KILL, bson_decoder_s::pending, and read_x().

Referenced by decode_callback(), and param_import_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_decoder_data_pending()

__EXPORT size_t bson_decoder_data_pending ( bson_decoder_t  decoder)

Report copyable data size.

Parameters
decoderDecoder state, must have been initialised with bson_decoder_init.

Definition at line 331 of file tinybson.cpp.

References bson_decoder_s::pending.

Referenced by decode_callback(), and param_import_callback().

Here is the caller graph for this function:

◆ bson_decoder_init_buf()

__EXPORT int bson_decoder_init_buf ( bson_decoder_t  decoder,
void *  buf,
unsigned  bufsize,
bson_decoder_callback  callback,
void *  priv 
)

Initialise the decoder to read from a buffer in memory.

Parameters
decoderDecoder state structure to be initialised.
bufBuffer to read from.
bufsizeSize of the buffer (BSON object may be smaller). May be passed as zero if the buffer size should be extracted from the BSON header only.
callbackCallback to be invoked by bson_decoder_next
privCallback private data, stored in node.
Returns
Zero on success.

Definition at line 137 of file tinybson.cpp.

References BSON_UNDEFINED, bson_decoder_s::buf, bson_decoder_s::bufpos, bson_decoder_s::bufsize, bson_decoder_s::callback, CODER_KILL, bson_decoder_s::dead, debug, bson_decoder_s::fd, bson_decoder_s::nesting, bson_decoder_s::node, bson_decoder_s::pending, bson_decoder_s::priv, read_int32(), and bson_node_s::type.

Referenced by param_import_internal(), and test_bson().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_decoder_init_file()

__EXPORT int bson_decoder_init_file ( bson_decoder_t  decoder,
int  fd,
bson_decoder_callback  callback,
void *  priv 
)

Initialise the decoder to read from a file.

Parameters
decoderDecoder state structure to be initialised.
fdFile to read BSON data from.
callbackCallback to be invoked by bson_decoder_next
privCallback private data, stored in node.
Returns
Zero on success.

Definition at line 114 of file tinybson.cpp.

References BSON_UNDEFINED, bson_decoder_s::buf, bson_decoder_s::callback, CODER_KILL, bson_decoder_s::dead, bson_decoder_s::fd, fd, bson_decoder_s::nesting, bson_decoder_s::node, bson_decoder_s::pending, bson_decoder_s::priv, read_int32(), and bson_node_s::type.

Referenced by param_import_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_decoder_next()

__EXPORT int bson_decoder_next ( bson_decoder_t  decoder)

Process the next node from the stream and invoke the callback.

Parameters
decoderDecoder state, must have been initialised with bson_decoder_init.
Returns
-1 if parsing encountered an error, 0 if the BSON stream has ended, otherwise the return value from the callback.

Definition at line 180 of file tinybson.cpp.

References bson_node_s::b, BSON_BINDATA, BSON_BOOL, BSON_DOUBLE, BSON_EOO, BSON_INT32, BSON_INT64, BSON_MAXNAME, BSON_STRING, bson_decoder_s::callback, CODER_CHECK, CODER_KILL, bson_node_s::d, debug, bson_decoder_s::fd, bson_node_s::i, bson_node_s::name, bson_decoder_s::nesting, bson_decoder_s::node, bson_decoder_s::pending, bson_decoder_s::priv, read_double(), read_int32(), read_int64(), read_int8(), bson_node_s::subtype, and bson_node_s::type.

Referenced by decode(), and param_import_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_append_binary()

__EXPORT int bson_encoder_append_binary ( bson_encoder_t  encoder,
const char *  name,
bson_binary_subtype_t  subtype,
size_t  size,
const void *  data 
)

Append a binary blob to the encoded stream.

Parameters
encoderEncoder state.
nameNode name.
subtypeBinary data subtype.
sizeData size.
dataBuffer containing data to be encoded.

Definition at line 614 of file tinybson.cpp.

References BSON_BINDATA, CODER_CHECK, CODER_KILL, write_int32(), write_int8(), write_name(), and write_x().

Referenced by encode(), param_export(), and param_export_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_append_bool()

__EXPORT int bson_encoder_append_bool ( bson_encoder_t  encoder,
const char *  name,
bool  value 
)

Append a boolean to the encoded stream.

Parameters
encoderEncoder state.
nameNode name.
valueValue to be encoded.

Definition at line 538 of file tinybson.cpp.

References BSON_BOOL, CODER_CHECK, CODER_KILL, write_int8(), and write_name().

Referenced by encode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_append_double()

__EXPORT int bson_encoder_append_double ( bson_encoder_t  encoder,
const char *  name,
double  value 
)

Append a double to the encoded stream.

Parameters
encoderEncoder state.
nameNode name.
valueValue to be encoded.

Definition at line 580 of file tinybson.cpp.

References BSON_DOUBLE, CODER_CHECK, CODER_KILL, write_double(), write_int8(), and write_name().

Referenced by encode(), param_export(), and param_export_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_append_int()

__EXPORT int bson_encoder_append_int ( bson_encoder_t  encoder,
const char *  name,
int64_t  value 
)

Append an integer to the encoded stream.

Parameters
encoderEncoder state.
nameNode name.
valueValue to be encoded.

Definition at line 552 of file tinybson.cpp.

References BSON_INT32, BSON_INT64, CODER_CHECK, CODER_KILL, debug, write_int32(), write_int64(), write_int8(), and write_name().

Referenced by encode(), param_export(), and param_export_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_append_string()

__EXPORT int bson_encoder_append_string ( bson_encoder_t  encoder,
const char *  name,
const char *  string 
)

Append a string to the encoded stream.

Parameters
encoderEncoder state.
nameNode name.
stringNul-terminated C string.

Definition at line 595 of file tinybson.cpp.

References BSON_STRING, CODER_CHECK, CODER_KILL, write_int32(), write_int8(), write_name(), and write_x().

Referenced by encode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_buf_data()

__EXPORT void* bson_encoder_buf_data ( bson_encoder_t  encoder)

Get a pointer to the encoded object buffer.

Note that if the buffer was allocated by the encoder, it is the caller's responsibility to free this buffer.

Definition at line 527 of file tinybson.cpp.

References bson_encoder_s::buf, and bson_encoder_s::fd.

Referenced by param_export_internal(), and test_bson().

Here is the caller graph for this function:

◆ bson_encoder_buf_size()

__EXPORT int bson_encoder_buf_size ( bson_encoder_t  encoder)

Fetch the size of the encoded object; only valid for buffer operations.

Definition at line 515 of file tinybson.cpp.

References bson_encoder_s::bufpos, CODER_CHECK, and bson_encoder_s::fd.

Referenced by bson_encoder_fini(), param_export_internal(), and test_bson().

Here is the caller graph for this function:

◆ bson_encoder_fini()

__EXPORT int bson_encoder_fini ( bson_encoder_t  encoder)

Finalise the encoded stream.

Parameters
encoderThe encoder to finalise.

Definition at line 484 of file tinybson.cpp.

References bson_encoder_buf_size(), BSON_EOO, BSON_FSYNC, BSON_WRITE, bson_encoder_s::buf, bson_encoder_s::bufpos, CODER_CHECK, CODER_KILL, bson_encoder_s::fd, and write_int8().

Referenced by encode(), param_export(), and param_export_internal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_init_buf()

__EXPORT int bson_encoder_init_buf ( bson_encoder_t  encoder,
void *  buf,
unsigned  bufsize 
)

Initialze the encoder for writing to a buffer.

Parameters
encoderEncoder state structure to be initialised.
bufBuffer pointer to use, or nullptr if the buffer should be allocated by the encoder.
bufsizeMaximum buffer size, or zero for no limit. If the buffer is supplied, the size of the supplied buffer.
Returns
Zero on success.

Definition at line 460 of file tinybson.cpp.

References bson_encoder_s::buf, bson_encoder_s::bufpos, bson_encoder_s::bufsize, CODER_KILL, bson_encoder_s::dead, bson_encoder_s::fd, bson_encoder_s::realloc_ok, and write_int32().

Referenced by param_export_internal(), and test_bson().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_init_buf_file()

__EXPORT int bson_encoder_init_buf_file ( bson_encoder_t  encoder,
int  fd,
void *  buf,
unsigned  bufsize 
)

Initialze the encoder for writing to a file.

Parameters
encoderEncoder state structure to be initialised.
fdFile to write to.
bufBuffer pointer to use, can't be nullptr
bufsizeSupplied buffer size
Returns
Zero on success.

Definition at line 443 of file tinybson.cpp.

References bson_encoder_s::buf, bson_encoder_s::bufpos, bson_encoder_s::bufsize, CODER_KILL, bson_encoder_s::dead, fd, bson_encoder_s::fd, bson_encoder_s::realloc_ok, and write_int32().

Referenced by param_export().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bson_encoder_init_file()

__EXPORT int bson_encoder_init_file ( bson_encoder_t  encoder,
int  fd 
)

Initialze the encoder for writing to a file.

Parameters
encoderEncoder state structure to be initialised.
fdFile to write to.
Returns
Zero on success.

Definition at line 429 of file tinybson.cpp.

References bson_encoder_s::buf, CODER_KILL, bson_encoder_s::dead, fd, bson_encoder_s::fd, and write_int32().

Referenced by param_export().

Here is the call graph for this function:
Here is the caller graph for this function: