summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorrimio <vasi.vilvoiu@gmail.com>2018-03-04 22:57:17 +0200
committerrimio <vasi.vilvoiu@gmail.com>2018-03-04 22:57:17 +0200
commit00d1b9ef4ac0ab4b22b5630fcfb85d0fdd1d8566 (patch)
tree11f1ee42c3cf44f537495092486179b15a84e04b /include
parent7ff2ce45235c0ccc3af994e5f16a9d2bc9b0416c (diff)
Basic encoder
Diffstat (limited to 'include')
-rw-r--r--include/ecbor.h94
1 files changed, 81 insertions, 13 deletions
diff --git a/include/ecbor.h b/include/ecbor.h
index 87f52d8..62ae4b5 100644
--- a/include/ecbor.h
+++ b/include/ecbor.h
@@ -31,6 +31,7 @@ typedef enum {
ECBOR_ERR_NULL_ITEM = 20,
ECBOR_ERR_WRONG_MODE = 30,
+ ECBOR_ERR_WONT_ENCODE_INDEFINITE = 31,
/* bounds errors */
ECBOR_ERR_INVALID_END_OF_BUFFER = 50,
@@ -82,12 +83,13 @@ typedef enum {
* We keep value 7 reserved so there is no confusion. */
/* Following types are translated from major type #7 */
- ECBOR_TYPE_FP16 = 8,
- ECBOR_TYPE_FP32 = 9,
- ECBOR_TYPE_FP64 = 10,
- ECBOR_TYPE_BOOL = 11,
- ECBOR_TYPE_NULL = 12,
- ECBOR_TYPE_UNDEFINED = 13,
+ ECBOR_TYPE_STOP_CODE = 8,
+ ECBOR_TYPE_FP16 = 9,
+ ECBOR_TYPE_FP32 = 10,
+ ECBOR_TYPE_FP64 = 11,
+ ECBOR_TYPE_BOOL = 12,
+ ECBOR_TYPE_NULL = 13,
+ ECBOR_TYPE_UNDEFINED = 14,
/* Last type, used for bounds checking */
ECBOR_TYPE_LAST = ECBOR_TYPE_UNDEFINED
@@ -100,7 +102,7 @@ typedef struct ecbor_item ecbor_item_t;
struct ecbor_item {
/* item type */
ecbor_type_t type;
-
+
/* value */
union {
uint64_t uinteger;
@@ -144,7 +146,8 @@ typedef enum {
ECBOR_MODE_DECODE = 0,
ECBOR_MODE_DECODE_STREAMED = 1,
ECBOR_MODE_DECODE_TREE = 2,
- ECBOR_MODE_ENCODE = 3
+ ECBOR_MODE_ENCODE = 3,
+ ECBOR_MODE_ENCODE_STREAMED = 4
} ecbor_mode_t;
/*
@@ -186,6 +189,16 @@ typedef struct {
* Initialization routines
*/
extern ecbor_error_t
+ecbor_initialize_encode (ecbor_encode_context_t *context,
+ uint8_t *buffer,
+ size_t buffer_size);
+
+extern ecbor_error_t
+ecbor_initialize_encode_streamed (ecbor_encode_context_t *context,
+ uint8_t *buffer,
+ size_t buffer_size);
+
+extern ecbor_error_t
ecbor_initialize_decode (ecbor_decode_context_t *context,
const uint8_t *buffer,
size_t buffer_size);
@@ -206,7 +219,8 @@ ecbor_initialize_decode_tree (ecbor_decode_context_t *context,
/*
* Encoding routines
*/
-
+extern ecbor_error_t
+ecbor_encode (ecbor_encode_context_t *context, ecbor_item_t *item);
/*
* Decoding routines
@@ -218,13 +232,67 @@ extern ecbor_error_t
ecbor_decode_tree (ecbor_decode_context_t *context, ecbor_item_t **root);
/*
- * Tree API
- */
-
-/*
* Strict API
*/
+/* Simple builders */
+extern ecbor_item_t
+ecbor_int (int64_t value);
+
+extern ecbor_item_t
+ecbor_uint (int64_t value);
+
+extern ecbor_item_t
+ecbor_bstr (uint8_t *bstr, size_t length);
+
+extern ecbor_item_t
+ecbor_str (char *str, size_t length);
+
+extern ecbor_item_t
+ecbor_tag (ecbor_item_t *child, uint64_t tag_value);
+
+extern ecbor_item_t
+ecbor_fp32 (float value);
+
+extern ecbor_item_t
+ecbor_fp64 (double value);
+
+extern ecbor_item_t
+ecbor_bool (uint8_t value);
+
+extern ecbor_item_t
+ecbor_null (void);
+
+extern ecbor_item_t
+ecbor_undefined (void);
+
+
+/* Streamed encoding simple builders */
+extern ecbor_item_t
+ecbor_array_token (size_t length);
+
+extern ecbor_item_t
+ecbor_indefinite_array_token (void);
+
+extern ecbor_item_t
+ecbor_map_token (size_t length);
+
+extern ecbor_item_t
+ecbor_indefinite_map_token (void);
+
+extern ecbor_item_t
+ecbor_stop_code (void);
+
+
+/* Array and map builders */
+extern ecbor_error_t
+ecbor_array (ecbor_item_t *array, ecbor_item_t *items, size_t length);
+
+extern ecbor_error_t
+ecbor_map (ecbor_item_t *map, ecbor_item_t *keys, ecbor_item_t *values,
+ size_t length);
+
+
/* Metadata */
extern ecbor_type_t
ecbor_get_type (ecbor_item_t *item);