UM C API  6.16
lbmpdm.h File Reference

Ultra Messaging (UM) Pre-Defined Message (PDM) API. The "lbmpdm.h" header file defines the APIs to create and parse Pre-Defined Messages (PDM). The binary code is contained in the "lbm" library (dynamic on Unix: "liblbm.so", static on Unix: "liblbm.a", dynamic only on Windows: "lbm.dll"). There are also Java and .NET APIs. See Pre-Defined Messages for general information on PDM. See UM C API for general information on the C API. See Fundamental Concepts for an introduction to Ultra Messaging. More...

#include <stdlib.h>
#include <inttypes.h>

Go to the source code of this file.

Data Structures

struct  lbmpdm_decimal_t
 Structure to hold a scaled decimal number. A scaled decimal number consists of a mantissa $m$ and an exponent $exp$. It represents the value $m\cdot 10^{exp}$. More...
 
struct  lbmpdm_timestamp_t
 Structure to hold a timestamp value. More...
 
struct  lbmpdm_field_info_attr_stct_t
 Attribute struct to be passed along with the name when adding field info to a definition. More...
 
struct  lbmpdm_field_value_stct_t
 Field value struct that can be populated with a field value when passed to the lbmpdm_msg_get_field_value_stct function. More...
 

Macros

#define LBMPDMExpDLL
 PDM API function return codes.
 
#define PRIuSZ   "zu"
 
#define SCNuSZ   "zu"
 
#define PDM_FALSE   (uint8_t) 0
 
#define PDM_TRUE   (uint8_t) 1
 
#define PDM_FIELD_INFO_FLAG_REQ   0x1
 
#define PDM_FIELD_INFO_FLAG_FIXED_STR_LEN   0x2
 
#define PDM_FIELD_INFO_FLAG_NUM_ARR_ELEM   0x4
 
#define PDM_MSG_FLAG_VAR_OR_OPT_FLDS_SET   0x1
 
#define PDM_MSG_FLAG_INCL_DEFN   0x2
 
#define PDM_MSG_FLAG_USE_MSG_DEFN_IF_NEEDED   0x4
 
#define PDM_MSG_FLAG_TRY_LOAD_DEFN_FROM_CACHE   0x8
 
#define PDM_MSG_FLAG_NEED_BYTE_SWAP   0x10
 
#define PDM_MSG_FLAG_DEL_DEFN_WHEN_REPLACED   0x20
 
#define PDM_MSG_VER_POLICY_EXACT   0
 
#define PDM_MSG_VER_POLICY_BEST   1
 
#define PDM_SUCCESS   0
 
#define PDM_FAILURE   -1
 
#define PDM_ERR_FIELD_IS_NULL   1
 
#define PDM_ERR_NO_MORE_FIELDS   2
 
#define PDM_ERR_INSUFFICIENT_BUFFER_LENGTH   3
 
#define PDM_ERR_EINVAL   4
 
#define PDM_ERR_FIELD_NOT_FOUND   5
 
#define PDM_ERR_MSG_INVALID   6
 
#define PDM_ERR_DEFN_INVALID   7
 
#define PDM_ERR_NOMEM   8
 
#define PDM_ERR_REQ_FIELD_NOT_SET   9
 
#define PDM_ERR_CREATE_SECTION   10
 
#define PDM_ERR_CREATE_BUFFER   11
 
#define PDM_INTERNAL_TYPE_INVALID   -1
 
#define PDM_TYPE_BOOLEAN   0
 
#define PDM_TYPE_INT8   1
 
#define PDM_TYPE_UINT8   2
 
#define PDM_TYPE_INT16   3
 
#define PDM_TYPE_UINT16   4
 
#define PDM_TYPE_INT32   5
 
#define PDM_TYPE_UINT32   6
 
#define PDM_TYPE_INT64   7
 
#define PDM_TYPE_UINT64   8
 
#define PDM_TYPE_FLOAT   9
 
#define PDM_TYPE_DOUBLE   10
 
#define PDM_TYPE_DECIMAL   11
 
#define PDM_TYPE_TIMESTAMP   12
 
#define PDM_TYPE_FIX_STRING   13
 
#define PDM_TYPE_STRING   14
 
#define PDM_TYPE_FIX_UNICODE   15
 
#define PDM_TYPE_UNICODE   16
 
#define PDM_TYPE_BLOB   17
 
#define PDM_TYPE_MESSAGE   18
 
#define PDM_TYPE_BOOLEAN_ARR   19
 
#define PDM_TYPE_INT8_ARR   20
 
#define PDM_TYPE_UINT8_ARR   21
 
#define PDM_TYPE_INT16_ARR   22
 
#define PDM_TYPE_UINT16_ARR   23
 
#define PDM_TYPE_INT32_ARR   24
 
#define PDM_TYPE_UINT32_ARR   25
 
#define PDM_TYPE_INT64_ARR   26
 
#define PDM_TYPE_UINT64_ARR   27
 
#define PDM_TYPE_FLOAT_ARR   28
 
#define PDM_TYPE_DOUBLE_ARR   29
 
#define PDM_TYPE_DECIMAL_ARR   30
 
#define PDM_TYPE_TIMESTAMP_ARR   31
 
#define PDM_TYPE_FIX_STRING_ARR   32
 
#define PDM_TYPE_STRING_ARR   33
 
#define PDM_TYPE_FIX_UNICODE_ARR   34
 
#define PDM_TYPE_UNICODE_ARR   35
 
#define PDM_TYPE_BLOB_ARR   36
 
#define PDM_TYPE_MESSAGE_ARR   37
 
#define PDM_DEFN_STR_FIELD_NAMES   0
 
#define PDM_DEFN_INT_FIELD_NAMES   1
 
#define PDM_ITER_INVALID_FIELD_HANDLE   -1
 

Typedefs

typedef int32_t lbmpdm_field_handle_t
 Type representing a handle to a message field. Field handles are returned when adding a field to a definition, or can be retrieved from a definition using the lbmpdm_get_field_handle_by_str_name or lbpdm_get_field_handle_by_int_name functions.
 
typedef struct lbmpdm_msg_stct_t lbmpdm_msg_t
 Structure to hold a pdm message.
 
typedef struct lbmpdm_defn_stct_t lbmpdm_defn_t
 Structure to hold a pdm definition.
 
typedef struct lbmpdm_field_info_attr_stct_t lbmpdm_field_info_attr_t
 
typedef struct lbmpdm_field_value_stct_t lbmpdm_field_value_t
 
typedef struct lbmpdm_iter_stct_t lbmpdm_iter_t
 Iterator structure that is used to traverse the fields of a message.
 

Functions

LBMPDMExpDLL int lbmpdm_errnum ()
 Return the error number last encountered by this thread. More...
 
LBMPDMExpDLL const char * lbmpdm_errmsg ()
 Return an ASCII string containing the error message last encountered by this thread. More...
 
LBMPDMExpDLL int lbmpdm_cache_init (uint32_t cache_size)
 initialize the cache for a given number of buckets. If 0 is given the the cache will default. The default can be altered via a PDM attribute. More...
 
LBMPDMExpDLL int lbmpdm_cache_struct_add (lbmpdm_defn_t *defn)
 add a definition structure to the cache. It is assumed that the structure has a unique id, if the id is set to zero the structure will not be inserted into the map. More...
 
LBMPDMExpDLL int lbmpdm_cache_struct_remove (int32_t id)
 delete a definition structure from the cache. Does not error if the structure doesn't exist. More...
 
LBMPDMExpDLL int lbmpdm_cache_struct_remove_by_version (int32_t id, uint8_t vers_major, uint8_t vers_minor)
 delete a definition structure from the cache by its id and version. Does not error if the structure doesn't exist. More...
 
LBMPDMExpDLL int lbmpdm_cache_struct_find (lbmpdm_defn_t **defn, int32_t id)
 find a given definition structure by id and return the structure for it. Returns PDM_FAILURE for nothing found, and PDM_SUCCESS for something found. Note, since a structure with the id of 0 won't exist in the cache you will never find one being returned from this find with an id of 0. More...
 
LBMPDMExpDLL int lbmpdm_cache_struct_find_by_version (lbmpdm_defn_t **defn, int32_t id, uint8_t vers_major, uint8_t vers_minor)
 find a given definition structure by id, major version, and minor version and return the structure for it. Returns PDM_FAILURE for nothing found, and PDM_SUCCESS for something found. Note, since a structure with the id of 0 won't exist in the cache you will never find one being returned from this find with an id of 0. More...
 
LBMPDMExpDLL int lbmpdm_cache_clear_all ()
 nuke the whole cache, this deletes all the structures within the cache as well.
 
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_get_field_handle_by_str_name (lbmpdm_defn_t *defn, const char *str_name)
 Retrieve a field handle from a definition via name. More...
 
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_get_field_handle_by_int_name (lbmpdm_defn_t *defn, int32_t int_name)
 Retrieve a field handle from a definition via name. More...
 
LBMPDMExpDLL int lbmpdm_defn_create (lbmpdm_defn_t **defn, int32_t num_fields, int32_t id, int8_t vrs_mjr, int8_t vrs_mnr, uint8_t field_names_type)
 Create a definition, with the passed number of fields. The num_fields is required to be at least 1. The number of fields can grow beyond this value, it is used initially to size the internal field info array. More...
 
LBMPDMExpDLL int lbmpdm_defn_delete (lbmpdm_defn_t *defn)
 delete a given definition. More...
 
LBMPDMExpDLL int lbmpdm_defn_finalize (lbmpdm_defn_t *defn)
 make this definition final. This needs to be done before using it in a message. More...
 
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_add_field_info_by_str_name (lbmpdm_defn_t *defn, const char *str_name, int16_t type, lbmpdm_field_info_attr_t *info_attr)
 adds field info to the definition by string name More...
 
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_add_field_info_by_int_name (lbmpdm_defn_t *defn, int32_t int_name, int16_t type, lbmpdm_field_info_attr_t *info_attr)
 adds field info to the definition by integer name More...
 
LBMPDMExpDLL uint32_t lbmpdm_defn_get_length (lbmpdm_defn_t *defn)
 Gets the exact length of the serialized defn. This can be used to allocate a buffer of the exact length needed to serialize the defn. More...
 
LBMPDMExpDLL int32_t lbmpdm_defn_get_id (lbmpdm_defn_t *defn)
 Gets the id of the definition. More...
 
LBMPDMExpDLL int32_t lbmpdm_defn_get_num_fields (lbmpdm_defn_t *defn)
 Gets the number of fields in the definition. More...
 
LBMPDMExpDLL int8_t lbmpdm_defn_get_msg_vers_major (lbmpdm_defn_t *defn)
 Gets the message major version number from the definition. More...
 
LBMPDMExpDLL int8_t lbmpdm_defn_get_msg_vers_minor (lbmpdm_defn_t *defn)
 Gets the message minor version number from the definition. More...
 
LBMPDMExpDLL uint8_t lbmpdm_defn_get_field_names_type (lbmpdm_defn_t *defn)
 Gets the field names type (either PDM_DEFN_STR_FIELD_NAMES or PDM_DEFN_INT_FIELD_NAMES) from the definition. More...
 
LBMPDMExpDLL uint8_t lbmpdm_defn_is_finalized (lbmpdm_defn_t *defn)
 Gets whether or not the definition has been finalized (either PDM_TRUE or PDM_FALSE). More...
 
LBMPDMExpDLL const char * lbmpdm_defn_get_field_info_str_name (lbmpdm_defn_t *defn, lbmpdm_field_handle_t handle)
 Gets the string field name from a given definition's field handle. More...
 
LBMPDMExpDLL int32_t lbmpdm_defn_get_field_info_int_name (lbmpdm_defn_t *defn, lbmpdm_field_handle_t handle)
 Gets the integer field name from a given definition's field handle. More...
 
LBMPDMExpDLL int16_t lbmpdm_defn_get_field_info_type (lbmpdm_defn_t *defn, lbmpdm_field_handle_t handle)
 Gets the PDM field type from a given definition's field handle. More...
 
LBMPDMExpDLL int lbmpdm_defn_serialize (lbmpdm_defn_t *defn, char *buffer, uint32_t *defn_len)
 Serialize a defn to a buffer. In normal usage this is not needed as the defn is either known in advance or sent as part of a message. The defn that is passed in is serialized into the caller's supplied buffer. More...
 
LBMPDMExpDLL int lbmpdm_defn_deserialize (lbmpdm_defn_t *defn, const char *bufptr, uint32_t buflen, uint8_t swap_bytes)
 Deserialize the associated buffer into a newly created defn. More...
 
LBMPDMExpDLL int lbmpdm_msg_create (lbmpdm_msg_t **message, lbmpdm_defn_t *defn, uint32_t flags)
 creates a message with the specified definition More...
 
LBMPDMExpDLL int lbmpdm_msg_delete (lbmpdm_msg_t *message)
 Delete an lbmpdm_msg_t object and all associated resources (except the defn) This deletes a previously created PDM message and all resources associated with the message. More...
 
LBMPDMExpDLL int lbmpdm_msg_and_defn_delete (lbmpdm_msg_t *message)
 Delete an lbmpdm_msg_t object and all associated resources (including the defn) This deletes a previously created PDM message and all resources associated with the message. More...
 
LBMPDMExpDLL uint32_t lbmpdm_msg_get_length (const lbmpdm_msg_t *message)
 Gets the exact length of the serialized message. This can be used to allocate a buffer of the exact length needed to serialize the message. More...
 
LBMPDMExpDLL lbmpdm_defn_tlbmpdm_msg_get_defn (const lbmpdm_msg_t *message)
 Gets a pointer to the message definition. More...
 
LBMPDMExpDLL uint8_t lbmpdm_msg_is_field_set (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle)
 Gets whether or not the field value has been set. More...
 
LBMPDMExpDLL int lbmpdm_msg_get_field_value_stct (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle, lbmpdm_field_value_t *field_value)
 Populates a field value struct with the value from the message. More...
 
LBMPDMExpDLL int lbmpdm_msg_get_field_value (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle, void *value, size_t *len)
 Gets a field value from the message. More...
 
LBMPDMExpDLL int lbmpdm_msg_get_field_value_vec (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle, void *value, size_t len[], size_t *num_arr_elem)
 Gets an array of field values from the message. More...
 
LBMPDMExpDLL int lbmpdm_msg_set_field_value (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle, void *value, size_t len)
 Sets a field value in a message. More...
 
LBMPDMExpDLL int lbmpdm_msg_set_field_value_vec (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle, void *value, size_t len[], size_t num_arr_elem)
 Sets an array of field values in a message. More...
 
LBMPDMExpDLL int lbmpdm_msg_remove_field_value (lbmpdm_msg_t *message, lbmpdm_field_handle_t handle)
 Removes a field value from a message (marking it unset) More...
 
LBMPDMExpDLL int lbmpdm_msg_set_incl_defn_flag (lbmpdm_msg_t *message)
 Sets the message include definition flag. More...
 
LBMPDMExpDLL int lbmpdm_msg_unset_incl_defn_flag (lbmpdm_msg_t *message)
 Unsets the message include definition flag. More...
 
LBMPDMExpDLL int lbmpdm_field_value_stct_delete (lbmpdm_field_value_t *field_value)
 Deletes the allocated resources inside the field value struct. This does NOT free the actual field value struct passed in (which should be done outside PDM). Also, this does not affect the field value in the message, only this field value struct. More...
 
LBMPDMExpDLL int lbmpdm_msg_serialize (lbmpdm_msg_t *message, char *buffer)
 Serialize a message to a buffer. The message that is passed in is serialized into the caller's supplied buffer. More...
 
LBMPDMExpDLL int lbmpdm_msg_deserialize (lbmpdm_msg_t *message, const char *bufptr, uint32_t buflen)
 Deserialize the associated buffer into a newly created message. More...
 
LBMPDMExpDLL char * lbmpdm_msg_get_data (lbmpdm_msg_t *message)
 Serialize a message to a buffer and return the buffer. The message that is passed in is serialized into a buffer which will be cleaned up when the message is deleted. Use lbmpdm_msg_get_length to get the length of the buffer. More...
 
LBMPDMExpDLL int lbmpdm_iter_create (lbmpdm_iter_t **iter, lbmpdm_msg_t *message)
 Creates a pdm iterator to iterate through the fields in a message. More...
 
LBMPDMExpDLL int lbmpdm_iter_create_from_field_handle (lbmpdm_iter_t **iter, lbmpdm_msg_t *message, lbmpdm_field_handle_t field_handle)
 Creates a pdm iterator to iterate through the fields in a message starting at a particular field. More...
 
LBMPDMExpDLL int lbmpdm_iter_delete (lbmpdm_iter_t *iter)
 Deletes the iterator. More...
 
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_iter_get_current (lbmpdm_iter_t *iter)
 Gets the current field handle from the iterator. More...
 
LBMPDMExpDLL int lbmpdm_iter_first (lbmpdm_iter_t *iter)
 Sets the iterator back to the first field. More...
 
LBMPDMExpDLL int lbmpdm_iter_next (lbmpdm_iter_t *iter)
 Steps the iterator to the next first field. More...
 
LBMPDMExpDLL uint8_t lbmpdm_iter_has_next (lbmpdm_iter_t *iter)
 Checks to see if the iterator has another field to step to. More...
 
LBMPDMExpDLL uint8_t lbmpdm_iter_is_current_set (lbmpdm_iter_t *iter)
 Checks to see if the current field is set. More...
 
LBMPDMExpDLL int lbmpdm_iter_set_msg (lbmpdm_iter_t *iter, lbmpdm_msg_t *message)
 Sets the message used to step through by this iterator. More...
 
LBMPDMExpDLL int lbmpdm_iter_set_current_field_value (lbmpdm_iter_t *iter, void *value, size_t len)
 Sets the current field value to the value passed in. More...
 
LBMPDMExpDLL int lbmpdm_iter_set_current_field_value_vec (lbmpdm_iter_t *iter, void *value, size_t len[], size_t num_arr_elem)
 Sets the current field values to the passed array of values. More...
 
LBMPDMExpDLL int lbmpdm_iter_get_current_field_value (lbmpdm_iter_t *iter, void *value, size_t *len)
 Gets a field value from the iterator's current field. More...
 
LBMPDMExpDLL int lbmpdm_iter_get_current_field_value_vec (lbmpdm_iter_t *iter, void *value, size_t len[], size_t *num_arr_elem)
 Gets an array of field values from the iterator's current field. More...
 

Detailed Description

Ultra Messaging (UM) Pre-Defined Message (PDM) API. The "lbmpdm.h" header file defines the APIs to create and parse Pre-Defined Messages (PDM). The binary code is contained in the "lbm" library (dynamic on Unix: "liblbm.so", static on Unix: "liblbm.a", dynamic only on Windows: "lbm.dll"). There are also Java and .NET APIs. See Pre-Defined Messages for general information on PDM. See UM C API for general information on the C API. See Fundamental Concepts for an introduction to Ultra Messaging.

Macro Definition Documentation

#define PDM_DEFN_INT_FIELD_NAMES   1

PDM Field Name Type. Use integer field names.

#define PDM_DEFN_STR_FIELD_NAMES   0

PDM Field Name Type. Use string field names.

#define PDM_ERR_CREATE_BUFFER   11

PDM Error Code. Error creating buffer.

#define PDM_ERR_CREATE_SECTION   10

PDM Error Code. Error creating field section.

#define PDM_ERR_DEFN_INVALID   7

PDM Error Code. Not a valid PDM definition.

#define PDM_ERR_EINVAL   4

PDM Error Code. Invalid parameter given.

#define PDM_ERR_FIELD_IS_NULL   1

PDM Error Code. Field is null.

#define PDM_ERR_FIELD_NOT_FOUND   5

PDM Error Code. Field not found.

#define PDM_ERR_INSUFFICIENT_BUFFER_LENGTH   3

PDM Error Code. Insufficient buffer length given.

#define PDM_ERR_MSG_INVALID   6

PDM Error Code. Not a valid PDM message.

#define PDM_ERR_NO_MORE_FIELDS   2

PDM Error Code. No more fields to iterate over.

#define PDM_ERR_NOMEM   8

PDM Error Code. No memory available.

#define PDM_ERR_REQ_FIELD_NOT_SET   9

PDM Error Code. Required field not set.

#define PDM_FAILURE   -1

PDM Return Code. Operation failed. See lbmpdm_errnum() or lbmpdm_errmsg() for the reason.

#define PDM_FALSE   (uint8_t) 0

PDM true/false values. PDM value for FALSE.

#define PDM_FIELD_INFO_FLAG_FIXED_STR_LEN   0x2

PDM Field Info Flags. Field has a fixed string length (for string and unicode types).

#define PDM_FIELD_INFO_FLAG_NUM_ARR_ELEM   0x4

PDM Field Info Flags. Field has a fixed array size (for array types).

#define PDM_FIELD_INFO_FLAG_REQ   0x1

PDM Field Info Flags. Field is required.

#define PDM_INTERNAL_TYPE_INVALID   -1

PDM Field Type. Invalid Type.

#define PDM_ITER_INVALID_FIELD_HANDLE   -1

PDM Iterator Invalid Handle. Indicates invalid field handle.

#define PDM_MSG_FLAG_DEL_DEFN_WHEN_REPLACED   0x20

PDM Message Flags. If a message's existing definition should be deleted when replaced when deserializing a message.

#define PDM_MSG_FLAG_INCL_DEFN   0x2

PDM Message Flags. If the definition should be serialized with the message.

#define PDM_MSG_FLAG_NEED_BYTE_SWAP   0x10

PDM Message Flags. If the field values need bytes to be swapped (set internally).

#define PDM_MSG_FLAG_TRY_LOAD_DEFN_FROM_CACHE   0x8

PDM Message Flags. If a message should try to load a needed definition from the cache when deserializing.

#define PDM_MSG_FLAG_USE_MSG_DEFN_IF_NEEDED   0x4

PDM Message Flags. If a message should override its existing definition with one included when deserializing a message.

#define PDM_MSG_FLAG_VAR_OR_OPT_FLDS_SET   0x1

PDM Message Flags. If any variable or optional fields have been set (set internally).

#define PDM_MSG_VER_POLICY_BEST   1

PDM Message Version Policy. Use Best Match versioning Policy.

#define PDM_MSG_VER_POLICY_EXACT   0

PDM Message Version Policy. Use Exact Match versioning Policy.

#define PDM_SUCCESS   0

PDM Return Code. Operation was successful.

#define PDM_TRUE   (uint8_t) 1

PDM true/false values. PDM value for TRUE.

#define PDM_TYPE_BLOB   17

PDM Field Type. blob (variable length).

#define PDM_TYPE_BLOB_ARR   36

PDM Field Type. blob array.

#define PDM_TYPE_BOOLEAN   0

PDM Field Type. boolean.

#define PDM_TYPE_BOOLEAN_ARR   19

PDM Field Type. boolean array.

#define PDM_TYPE_DECIMAL   11

PDM Field Type. decimal.

#define PDM_TYPE_DECIMAL_ARR   30

PDM Field Type. decimal array.

#define PDM_TYPE_DOUBLE   10

PDM Field Type. double.

#define PDM_TYPE_DOUBLE_ARR   29

PDM Field Type. double array.

#define PDM_TYPE_FIX_STRING   13

PDM Field Type. fixed string.

#define PDM_TYPE_FIX_STRING_ARR   32

PDM Field Type. fixed string array.

#define PDM_TYPE_FIX_UNICODE   15

PDM Field Type. fixed unicode.

#define PDM_TYPE_FIX_UNICODE_ARR   34

PDM Field Type. fixed unicode array.

#define PDM_TYPE_FLOAT   9

PDM Field Type. float.

#define PDM_TYPE_FLOAT_ARR   28

PDM Field Type. float array.

#define PDM_TYPE_INT16   3

PDM Field Type. 16 bit integer.

#define PDM_TYPE_INT16_ARR   22

PDM Field Type. 16 bit integer array.

#define PDM_TYPE_INT32   5

PDM Field Type. 32 bit integer.

#define PDM_TYPE_INT32_ARR   24

PDM Field Type. 32 bit integer array.

#define PDM_TYPE_INT64   7

PDM Field Type. 64 bit integer.

#define PDM_TYPE_INT64_ARR   26

PDM Field Type. 64 bit integer array.

#define PDM_TYPE_INT8   1

PDM Field Type. 8 bit integer.

#define PDM_TYPE_INT8_ARR   20

PDM Field Type. 8 bit integer array.

#define PDM_TYPE_MESSAGE   18

PDM Field Type. PDM message (variable length).

#define PDM_TYPE_MESSAGE_ARR   37

PDM Field Type. PDM message array.

#define PDM_TYPE_STRING   14

PDM Field Type. string (variable length).

#define PDM_TYPE_STRING_ARR   33

PDM Field Type. string array.

#define PDM_TYPE_TIMESTAMP   12

PDM Field Type. timestamp.

#define PDM_TYPE_TIMESTAMP_ARR   31

PDM Field Type. timestamp array.

#define PDM_TYPE_UINT16   4

PDM Field Type. unsigned 16 bit integer.

#define PDM_TYPE_UINT16_ARR   23

PDM Field Type. unsigned 16 bit integer array.

#define PDM_TYPE_UINT32   6

PDM Field Type. unsigned 32 bit integer.

#define PDM_TYPE_UINT32_ARR   25

PDM Field Type. unsigned 32 bit integer array.

#define PDM_TYPE_UINT64   8

PDM Field Type. unsigned 64 bit integer.

#define PDM_TYPE_UINT64_ARR   27

PDM Field Type. unsigned 64 bit integer array.

#define PDM_TYPE_UINT8   2

PDM Field Type. unsigned 8 bit integer.

#define PDM_TYPE_UINT8_ARR   21

PDM Field Type. unsigned 8 bit integer array.

#define PDM_TYPE_UNICODE   16

PDM Field Type. unicode (variable length).

#define PDM_TYPE_UNICODE_ARR   35

PDM Field Type. unicode array.

Function Documentation

LBMPDMExpDLL int lbmpdm_cache_init ( uint32_t  cache_size)

initialize the cache for a given number of buckets. If 0 is given the the cache will default. The default can be altered via a PDM attribute.

Parameters
cache_size– how many buckets should this hash contain? If set to zero this will default.
LBMPDMExpDLL int lbmpdm_cache_struct_add ( lbmpdm_defn_t defn)

add a definition structure to the cache. It is assumed that the structure has a unique id, if the id is set to zero the structure will not be inserted into the map.

Parameters
defn– the new definition structure being added.
LBMPDMExpDLL int lbmpdm_cache_struct_find ( lbmpdm_defn_t **  defn,
int32_t  id 
)

find a given definition structure by id and return the structure for it. Returns PDM_FAILURE for nothing found, and PDM_SUCCESS for something found. Note, since a structure with the id of 0 won't exist in the cache you will never find one being returned from this find with an id of 0.

Parameters
defn– pointer to the structure to return. This field is not altered if nothing is found for a given id.
id– id to search for in the hash.
LBMPDMExpDLL int lbmpdm_cache_struct_find_by_version ( lbmpdm_defn_t **  defn,
int32_t  id,
uint8_t  vers_major,
uint8_t  vers_minor 
)

find a given definition structure by id, major version, and minor version and return the structure for it. Returns PDM_FAILURE for nothing found, and PDM_SUCCESS for something found. Note, since a structure with the id of 0 won't exist in the cache you will never find one being returned from this find with an id of 0.

Parameters
defn– pointer to the structure to return. This field is not altered if nothing is found for a given id.
id– id to search for in the hash.
vers_major– major version to search for in the hash.
vers_minor– minor version to search for in the hash.
LBMPDMExpDLL int lbmpdm_cache_struct_remove ( int32_t  id)

delete a definition structure from the cache. Does not error if the structure doesn't exist.

Parameters
id– id of the structure being deleted. If the id is not found this will do nothing.
LBMPDMExpDLL int lbmpdm_cache_struct_remove_by_version ( int32_t  id,
uint8_t  vers_major,
uint8_t  vers_minor 
)

delete a definition structure from the cache by its id and version. Does not error if the structure doesn't exist.

Parameters
id– id of the structure being deleted. If the id is not found this will do nothing.
vers_major– major version of the definition
vers_minor– minor version of the definition
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_add_field_info_by_int_name ( lbmpdm_defn_t defn,
int32_t  int_name,
int16_t  type,
lbmpdm_field_info_attr_t info_attr 
)

adds field info to the definition by integer name

Parameters
defn– A pointer to a PDM defn object.
int_name– the integer name
type– the PDM field type
info_attr– the field information attributes
Returns
PDM_SUCCESS or PDM_FAILURE
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_add_field_info_by_str_name ( lbmpdm_defn_t defn,
const char *  str_name,
int16_t  type,
lbmpdm_field_info_attr_t info_attr 
)

adds field info to the definition by string name

Parameters
defn– A pointer to a PDM defn object.
str_name– the string name
type– the PDM field type
info_attr– the field information attributes
Returns
PDM_SUCCESS or PDM_FAILURE
LBMPDMExpDLL int lbmpdm_defn_create ( lbmpdm_defn_t **  defn,
int32_t  num_fields,
int32_t  id,
int8_t  vrs_mjr,
int8_t  vrs_mnr,
uint8_t  field_names_type 
)

Create a definition, with the passed number of fields. The num_fields is required to be at least 1. The number of fields can grow beyond this value, it is used initially to size the internal field info array.

Parameters
defn– pointer to newly created definition.
num_fields– how many fields to initially assume we will have, this is for optimization, not a limit to how many fields.
id– This is the id for the definition. It is assumed that this is a unique id.
vrs_mjr– A version major number to be assigned to the newly created definition. When deserializing a message, PDM will attempt to use the existing set definition if the ids match. If the message flag is set to use the included message definition or try to load the definition from the cache, then an attempt will be made to replace the set definition with the new one by its version numbers. Please note: when versioning message definitions, adding optional fields only is the safest way to unsure interoperability with older versions. Adding new required fields or modifying the types of existing required fields may lead to messages that are not deserializable by receivers with older definition versions.
vrs_mnr– A version minor number
field_names_type– A type that indicates whether the field names will be strings or ints. Use either PDM_DEFN_STR_FIELD_NAMES or PDM_DEFN_INT_FIELD_NAMES for the value.
Returns
PDM_SUCCESS or PDM_FAILURE.
LBMPDMExpDLL int lbmpdm_defn_delete ( lbmpdm_defn_t defn)

delete a given definition.

Parameters
defn– definition to be deleted.
Returns
PDM_SUCCESS or PDM_FAILURE.
LBMPDMExpDLL int lbmpdm_defn_deserialize ( lbmpdm_defn_t defn,
const char *  bufptr,
uint32_t  buflen,
uint8_t  swap_bytes 
)

Deserialize the associated buffer into a newly created defn.

This will take the passed buffer and deserialize the contents into a newly created defn. When finished with the defn, the caller must call lbmpdm_defn_delete() to properly dispose of the defn. This is done automatically by a message when the defn is included. The message normally indicates to the definition whether or not swap bytes need to be set to PDM_TRUE so to use this method directly, this knowledge must be determined outside PDM.

See also
lbmpdm_msg_delete()
Parameters
defnA pointer to a previously created PDM defn object
bufptrThe buffer to be deserialized
buflenThe length of the buffer.
swap_bytesWhether or not bytes should be swapped to deal with endianness.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_defn_finalize ( lbmpdm_defn_t defn)

make this definition final. This needs to be done before using it in a message.

Parameters
defn– the definition to be finalized.
Returns
PDM_SUCCESS or PDM_FAILURE
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_get_field_handle_by_int_name ( lbmpdm_defn_t defn,
int32_t  int_name 
)

Retrieve a field handle from a definition via name.

Parameters
defn– definition created from lbmpdm_defn_create.
int_name– the name of the field to be retrieved.
Returns
A valid field handle on success, PDM_FAILURE otherwise.
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_defn_get_field_handle_by_str_name ( lbmpdm_defn_t defn,
const char *  str_name 
)

Retrieve a field handle from a definition via name.

Parameters
defn– definition created from lbmpdm_defn_create.
str_name– the name of the field to be retrieved.
Returns
A valid field handle on success, PDM_FAILURE otherwise.
LBMPDMExpDLL int32_t lbmpdm_defn_get_field_info_int_name ( lbmpdm_defn_t defn,
lbmpdm_field_handle_t  handle 
)

Gets the integer field name from a given definition's field handle.

Parameters
defn– A pointer to a PDM defn object.
handle– A valid field handle from the definition.
Returns
the int field name or -1.
LBMPDMExpDLL const char* lbmpdm_defn_get_field_info_str_name ( lbmpdm_defn_t defn,
lbmpdm_field_handle_t  handle 
)

Gets the string field name from a given definition's field handle.

Parameters
defn– A pointer to a PDM defn object.
handle– A valid field handle from the definition.
Returns
the string field name or NULL.
LBMPDMExpDLL int16_t lbmpdm_defn_get_field_info_type ( lbmpdm_defn_t defn,
lbmpdm_field_handle_t  handle 
)

Gets the PDM field type from a given definition's field handle.

Parameters
defn– A pointer to a PDM defn object.
handle– A valid field handle from the definition.
Returns
the PDM type or PDM_INTERNAL_TYPE_INVALID.
LBMPDMExpDLL uint8_t lbmpdm_defn_get_field_names_type ( lbmpdm_defn_t defn)

Gets the field names type (either PDM_DEFN_STR_FIELD_NAMES or PDM_DEFN_INT_FIELD_NAMES) from the definition.

Parameters
defn– A pointer to a PDM defn object.
Returns
the field names type
LBMPDMExpDLL int32_t lbmpdm_defn_get_id ( lbmpdm_defn_t defn)

Gets the id of the definition.

Parameters
defn– A pointer to a PDM defn object.
Returns
the id of the definition
LBMPDMExpDLL uint32_t lbmpdm_defn_get_length ( lbmpdm_defn_t defn)

Gets the exact length of the serialized defn. This can be used to allocate a buffer of the exact length needed to serialize the defn.

Parameters
defn– A pointer to a PDM defn object.
Returns
the exact length of the serialized defn
LBMPDMExpDLL int8_t lbmpdm_defn_get_msg_vers_major ( lbmpdm_defn_t defn)

Gets the message major version number from the definition.

Parameters
defn– A pointer to a PDM defn object.
Returns
the major version number
LBMPDMExpDLL int8_t lbmpdm_defn_get_msg_vers_minor ( lbmpdm_defn_t defn)

Gets the message minor version number from the definition.

Parameters
defn– A pointer to a PDM defn object.
Returns
the minor version number
LBMPDMExpDLL int32_t lbmpdm_defn_get_num_fields ( lbmpdm_defn_t defn)

Gets the number of fields in the definition.

Parameters
defn– A pointer to a PDM defn object.
Returns
the number of fields in the definition
LBMPDMExpDLL uint8_t lbmpdm_defn_is_finalized ( lbmpdm_defn_t defn)

Gets whether or not the definition has been finalized (either PDM_TRUE or PDM_FALSE).

Parameters
defn– A pointer to a PDM defn object.
Returns
the value indicating whether or not the definition has been finalized
LBMPDMExpDLL int lbmpdm_defn_serialize ( lbmpdm_defn_t defn,
char *  buffer,
uint32_t *  defn_len 
)

Serialize a defn to a buffer. In normal usage this is not needed as the defn is either known in advance or sent as part of a message. The defn that is passed in is serialized into the caller's supplied buffer.

Parameters
defnA PDM defn to be serialized
bufferThe caller allocated buffer
defn_lenWill be set to the length of the definition
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL const char* lbmpdm_errmsg ( )

Return an ASCII string containing the error message last encountered by this thread.

Returns
Pointer to a static char array holding the error message.
LBMPDMExpDLL int lbmpdm_errnum ( )

Return the error number last encountered by this thread.

Returns
An integer error number.
LBMPDMExpDLL int lbmpdm_field_value_stct_delete ( lbmpdm_field_value_t field_value)

Deletes the allocated resources inside the field value struct. This does NOT free the actual field value struct passed in (which should be done outside PDM). Also, this does not affect the field value in the message, only this field value struct.

See also
lbmpdm_msg_get_field_value_stct
Parameters
field_value– A pointer to a field value structure.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_create ( lbmpdm_iter_t **  iter,
lbmpdm_msg_t message 
)

Creates a pdm iterator to iterate through the fields in a message.

Parameters
iter– Pointer to the iterator pointer which will be created
message– the pdm message
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_create_from_field_handle ( lbmpdm_iter_t **  iter,
lbmpdm_msg_t message,
lbmpdm_field_handle_t  field_handle 
)

Creates a pdm iterator to iterate through the fields in a message starting at a particular field.

Parameters
iter– Pointer to the iterator pointer which will be created
message– the pdm message
field_handle– the handle to the field where the iterator should start
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_delete ( lbmpdm_iter_t iter)

Deletes the iterator.

Parameters
iter– the pdm iterator
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_first ( lbmpdm_iter_t iter)

Sets the iterator back to the first field.

Parameters
iter– the pdm iterator
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL lbmpdm_field_handle_t lbmpdm_iter_get_current ( lbmpdm_iter_t iter)

Gets the current field handle from the iterator.

Parameters
iter– The pdm iterator
Returns
the lbmpdm_field_handle_t (field handle)
LBMPDMExpDLL int lbmpdm_iter_get_current_field_value ( lbmpdm_iter_t iter,
void *  value,
size_t *  len 
)

Gets a field value from the iterator's current field.

Parameters
iter– the pdm iterator
value– A pointer to a value big enough to hold the field value
len– A pointer describing the currently allocated length of the void *value. If it is not large enough to hold the field value, PDM_FAILURE will be returned and len will be set to the needed length.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_get_current_field_value_vec ( lbmpdm_iter_t iter,
void *  value,
size_t  len[],
size_t *  num_arr_elem 
)

Gets an array of field values from the iterator's current field.

Parameters
iter– the pdm iterator
value– A pointer to an array of values big enough to hold the field values
len– An array of lengths describing the currently allocated length of each void *value array element. If it is not large enough to hold the field value, PDM_FAILURE will be returned and that len element will be set to the needed length.
num_arr_elem– The number of elements in the value and len array.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL uint8_t lbmpdm_iter_has_next ( lbmpdm_iter_t iter)

Checks to see if the iterator has another field to step to.

Parameters
iter– the pdm iterator
Returns
PDM_TRUE if there are more fields or PDM_FALSE if this is the last field
LBMPDMExpDLL uint8_t lbmpdm_iter_is_current_set ( lbmpdm_iter_t iter)

Checks to see if the current field is set.

Parameters
iter– the pdm iterator
Returns
PDM_TRUE if the current field is set or PDM_FALSE if it is not
LBMPDMExpDLL int lbmpdm_iter_next ( lbmpdm_iter_t iter)

Steps the iterator to the next first field.

Parameters
iter– the pdm iterator
Returns
PDM_SUCCESS if successful or PDM_ERR_NO_MORE_FIELDS if moved beyond the last field
LBMPDMExpDLL int lbmpdm_iter_set_current_field_value ( lbmpdm_iter_t iter,
void *  value,
size_t  len 
)

Sets the current field value to the value passed in.

Parameters
iter– the pdm iterator
value– the new field value
len– the len of the enw field value
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_set_current_field_value_vec ( lbmpdm_iter_t iter,
void *  value,
size_t  len[],
size_t  num_arr_elem 
)

Sets the current field values to the passed array of values.

Parameters
iter– the pdm iterator
value– A pointer to an array of values that should be set into the message
len– A size_t array describing the currently allocated lengths of each element in the value array For fixed length types, setting a len element to 0 will allow it to default to the fixed length size of the type.
num_arr_elem– The number of elements in the value and len array.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_iter_set_msg ( lbmpdm_iter_t iter,
lbmpdm_msg_t message 
)

Sets the message used to step through by this iterator.

Parameters
iter– the pdm iterator
message– the pdm message to step through
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_and_defn_delete ( lbmpdm_msg_t message)

Delete an lbmpdm_msg_t object and all associated resources (including the defn) This deletes a previously created PDM message and all resources associated with the message.

See also
lbmpdm_msg_create()
Parameters
message– A pointer to a PDM message object.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_create ( lbmpdm_msg_t **  message,
lbmpdm_defn_t defn,
uint32_t  flags 
)

creates a message with the specified definition

Parameters
message– pointer to the newly created message
defn– the definition to be used by the message
flags– flags to set in the message
Returns
PDM_SUCCESS or PDM_FAILURE
LBMPDMExpDLL int lbmpdm_msg_delete ( lbmpdm_msg_t message)

Delete an lbmpdm_msg_t object and all associated resources (except the defn) This deletes a previously created PDM message and all resources associated with the message.

See also
lbmpdm_msg_create()
Parameters
message– A pointer to a PDM message object.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_deserialize ( lbmpdm_msg_t message,
const char *  bufptr,
uint32_t  buflen 
)

Deserialize the associated buffer into a newly created message.

This will take the passed buffer and deserialize the contents into a newly created message. It will verify that the buffer is a valid PDM message before trying to deserialize. When finished with the message, the caller must call lbmpdm_msg_delete() to properly dispose of the message.

See also
lbmpdm_msg_delete()
Parameters
messageA pointer to a previously created PDM message object
bufptrThe buffer to be deserialized
buflenThe length of the buffer.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL char* lbmpdm_msg_get_data ( lbmpdm_msg_t message)

Serialize a message to a buffer and return the buffer. The message that is passed in is serialized into a buffer which will be cleaned up when the message is deleted. Use lbmpdm_msg_get_length to get the length of the buffer.

Parameters
messageA PDM Message to be serialized
Returns
a valid char * or NULL if an error occurred.
LBMPDMExpDLL lbmpdm_defn_t* lbmpdm_msg_get_defn ( const lbmpdm_msg_t message)

Gets a pointer to the message definition.

Parameters
message– A pointer to a PDM message object.
Returns
the message definition
LBMPDMExpDLL int lbmpdm_msg_get_field_value ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle,
void *  value,
size_t *  len 
)

Gets a field value from the message.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
value– A pointer to a value big enough to hold the field value
len– A pointer describing the currently allocated length of the void *value. If it is not large enough to hold the field value, PDM_FAILURE will be returned and len will be set to the needed length.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_get_field_value_stct ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle,
lbmpdm_field_value_t field_value 
)

Populates a field value struct with the value from the message.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
field_value– A pointer to a field value structure
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_get_field_value_vec ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle,
void *  value,
size_t  len[],
size_t *  num_arr_elem 
)

Gets an array of field values from the message.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
value– An array of pointers with each one already allocated of sufficient length to hold each field value element
len– An array describing the currently allocated lengths of each element of the void *value. If any len element is not large enough to hold the field value, PDM_FAILURE will be returned and the len array will be set to the needed lengths.
num_arr_elem– A pointer to the number of allocated elements in the value and len arrays. If the number is less than the number of elements in the actual field value, PDM_FAILURE will be returned and num_arr_elem will be set to the correct value.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL uint32_t lbmpdm_msg_get_length ( const lbmpdm_msg_t message)

Gets the exact length of the serialized message. This can be used to allocate a buffer of the exact length needed to serialize the message.

Parameters
message– A pointer to a PDM message object.
Returns
the exact length of the serialized message
LBMPDMExpDLL uint8_t lbmpdm_msg_is_field_set ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle 
)

Gets whether or not the field value has been set.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
Returns
PDM_TRUE or PDM_FALSE
LBMPDMExpDLL int lbmpdm_msg_remove_field_value ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle 
)

Removes a field value from a message (marking it unset)

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_serialize ( lbmpdm_msg_t message,
char *  buffer 
)

Serialize a message to a buffer. The message that is passed in is serialized into the caller's supplied buffer.

Parameters
messageA PDM Message to be serialized
bufferThe caller allocated buffer
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_set_field_value ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle,
void *  value,
size_t  len 
)

Sets a field value in a message.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
value– A pointer to a value that should be set into the message
len– A size_t describing the currently allocated length of the void *value. For fixed length types, setting len to 0 will allow it to default to the fixed length size of the type.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_set_field_value_vec ( lbmpdm_msg_t message,
lbmpdm_field_handle_t  handle,
void *  value,
size_t  len[],
size_t  num_arr_elem 
)

Sets an array of field values in a message.

Parameters
message– A pointer to a PDM message object.
handle– A valid field handle
value– A pointer to an array of values that should be set into the message
len– A size_t array describing the currently allocated lengths of each element in the value array For fixed length types, setting a len element to 0 will allow it to default to the fixed length size of the type.
num_arr_elem– The number of elements in the value and len array.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_set_incl_defn_flag ( lbmpdm_msg_t message)

Sets the message include definition flag.

Parameters
message– A pointer to a PDM message object.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.
LBMPDMExpDLL int lbmpdm_msg_unset_incl_defn_flag ( lbmpdm_msg_t message)

Unsets the message include definition flag.

Parameters
message– A pointer to a PDM message object.
Returns
PDM_SUCCESS if successful or PDM_FAILURE otherwise.