You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2019/11/25 18:52:29 UTC
[qpid-proton] 01/02: PROTON-2140: remove encoder & decoder elements
from pn_data_t
This is an automated email from the ASF dual-hosted git repository.
astitcher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 3b84a5b8ab1c33fff1ded82aa2d8f7ea08fb5ec4
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Mon Nov 25 11:43:48 2019 -0500
PROTON-2140: remove encoder & decoder elements from pn_data_t
---
c/src/core/codec.c | 38 +++++++++++++++-----------------------
c/src/core/data.h | 2 --
c/src/core/decoder.c | 32 ++++++++++----------------------
c/src/core/decoder.h | 10 ++++++++--
c/src/core/encoder.c | 37 ++++++++++++-------------------------
c/src/core/encoder.h | 11 +++++++++--
6 files changed, 54 insertions(+), 76 deletions(-)
diff --git a/c/src/core/codec.c b/c/src/core/codec.c
index cbc2360..904fb72 100644
--- a/c/src/core/codec.c
+++ b/c/src/core/codec.c
@@ -88,8 +88,6 @@ static void pn_data_finalize(void *object)
pn_buffer_free(data->buf);
pn_free(data->str);
pn_error_free(data->error);
- pn_free(data->decoder);
- pn_free(data->encoder);
}
static const pn_fields_t *pni_node_fields(pn_data_t *data, pni_node_t *node)
@@ -372,22 +370,6 @@ static inline pn_string_t *pni_data_str(pn_data_t *data)
return data->str;
}
-static inline pn_decoder_t *pni_data_decoder(pn_data_t *data)
-{
- if (data->decoder == NULL) {
- data->decoder = pn_decoder();
- }
- return data->decoder;
-}
-
-static inline pn_encoder_t *pni_data_encoder(pn_data_t *data)
-{
- if (data->encoder == NULL) {
- data->encoder = pn_encoder();
- }
- return data->encoder;
-}
-
static inline pn_error_t *pni_data_error(pn_data_t *data)
{
if (data->error == NULL) {
@@ -408,8 +390,6 @@ pn_data_t *pn_data(size_t capacity)
data->current = 0;
data->base_parent = 0;
data->base_current = 0;
- data->decoder = NULL;
- data->encoder = NULL;
data->error = NULL;
data->str = NULL;
return data;
@@ -1560,17 +1540,29 @@ static pni_node_t *pni_data_add(pn_data_t *data)
ssize_t pn_data_encode(pn_data_t *data, char *bytes, size_t size)
{
- return pn_encoder_encode(pni_data_encoder(data), data, bytes, size);
+ pn_encoder_t encoder;
+ pn_encoder_initialize(&encoder);
+ ssize_t r = pn_encoder_encode(&encoder, data, bytes, size);
+ pn_encoder_finalize(&encoder);
+ return r;
}
ssize_t pn_data_encoded_size(pn_data_t *data)
{
- return pn_encoder_size(pni_data_encoder(data), data);
+ pn_encoder_t encoder;
+ pn_encoder_initialize(&encoder);
+ ssize_t r = pn_encoder_size(&encoder, data);
+ pn_encoder_finalize(&encoder);
+ return r;
}
ssize_t pn_data_decode(pn_data_t *data, const char *bytes, size_t size)
{
- return pn_decoder_decode(pni_data_decoder(data), bytes, size, data);
+ pn_decoder_t decoder;
+ pn_decoder_initialize(&decoder);
+ ssize_t r = pn_decoder_decode(&decoder, bytes, size, data);
+ pn_decoder_finalize(&decoder);
+ return r;
}
int pn_data_put_list(pn_data_t *data)
diff --git a/c/src/core/data.h b/c/src/core/data.h
index 94dc7d6..755909e 100644
--- a/c/src/core/data.h
+++ b/c/src/core/data.h
@@ -50,8 +50,6 @@ typedef struct {
struct pn_data_t {
pni_node_t *nodes;
pn_buffer_t *buf;
- pn_decoder_t *decoder;
- pn_encoder_t *encoder;
pn_error_t *error;
pn_string_t *str;
pni_nid_t capacity;
diff --git a/c/src/core/decoder.c b/c/src/core/decoder.c
index 1755db2..6fe02bf 100644
--- a/c/src/core/decoder.c
+++ b/c/src/core/decoder.c
@@ -27,35 +27,23 @@
#include <string.h>
-struct pn_decoder_t {
- const char *input;
- size_t size;
- const char *position;
- pn_error_t *error;
-};
+static inline pn_error_t *pni_decoder_error(pn_decoder_t *decoder)
+{
+ if (!decoder->error) decoder->error = pn_error();
+ return decoder->error;
+}
-static void pn_decoder_initialize(void *obj)
+void pn_decoder_initialize(pn_decoder_t *decoder)
{
- pn_decoder_t *decoder = (pn_decoder_t *) obj;
decoder->input = NULL;
decoder->size = 0;
decoder->position = NULL;
- decoder->error = pn_error();
-}
-
-static void pn_decoder_finalize(void *obj) {
- pn_decoder_t *decoder = (pn_decoder_t *) obj;
- pn_error_free(decoder->error);
+ decoder->error = NULL;
}
-#define pn_decoder_hashcode NULL
-#define pn_decoder_compare NULL
-#define pn_decoder_inspect NULL
-
-pn_decoder_t *pn_decoder()
+void pn_decoder_finalize(pn_decoder_t *decoder)
{
- static const pn_class_t clazz = PN_CLASS(pn_decoder);
- return (pn_decoder_t *) pn_class_new(&clazz, sizeof(pn_decoder_t));
+ pn_error_free(decoder->error);
}
static inline uint8_t pn_decoder_readf8(pn_decoder_t *decoder)
@@ -443,7 +431,7 @@ static int pni_decoder_decode_value(pn_decoder_t *decoder, pn_data_t *data, uint
return 0;
}
default:
- return pn_error_format(decoder->error, PN_ARG_ERR, "unrecognized typecode: %u", code);
+ return pn_error_format(pni_decoder_error(decoder), PN_ARG_ERR, "unrecognized typecode: %u", code);
}
return err;
diff --git a/c/src/core/decoder.h b/c/src/core/decoder.h
index b7de898..70bc4c8 100644
--- a/c/src/core/decoder.h
+++ b/c/src/core/decoder.h
@@ -22,9 +22,15 @@
*
*/
-typedef struct pn_decoder_t pn_decoder_t;
+typedef struct pn_decoder_t {
+ const char *input;
+ size_t size;
+ const char *position;
+ pn_error_t *error;
+} pn_decoder_t;
-pn_decoder_t *pn_decoder(void);
+void pn_decoder_initialize(pn_decoder_t *decoder);
+void pn_decoder_finalize(pn_decoder_t *decoder);
ssize_t pn_decoder_decode(pn_decoder_t *decoder, const char *src, size_t size, pn_data_t *dst);
#endif /* decoder.h */
diff --git a/c/src/core/encoder.c b/c/src/core/encoder.c
index 505db47..2be808c 100644
--- a/c/src/core/encoder.c
+++ b/c/src/core/encoder.c
@@ -29,37 +29,24 @@
#include "data.h"
-struct pn_encoder_t {
- char *output;
- char *position;
- pn_error_t *error;
- size_t size;
- unsigned null_count;
-};
-
-static void pn_encoder_initialize(void *obj)
+static inline pn_error_t *pni_encoder_error(pn_encoder_t *encoder)
+{
+ if (!encoder->error) encoder->error = pn_error();
+ return encoder->error;
+}
+
+void pn_encoder_initialize(pn_encoder_t *encoder)
{
- pn_encoder_t *encoder = (pn_encoder_t *) obj;
encoder->output = NULL;
encoder->position = NULL;
- encoder->error = pn_error();
+ encoder->error = NULL;
encoder->size = 0;
encoder->null_count = 0;
}
-static void pn_encoder_finalize(void *obj) {
- pn_encoder_t *encoder = (pn_encoder_t *) obj;
- pn_error_free(encoder->error);
-}
-
-#define pn_encoder_hashcode NULL
-#define pn_encoder_compare NULL
-#define pn_encoder_inspect NULL
-
-pn_encoder_t *pn_encoder()
+void pn_encoder_finalize(pn_encoder_t *encoder)
{
- static const pn_class_t clazz = PN_CLASS(pn_encoder);
- return (pn_encoder_t *) pn_class_new(&clazz, sizeof(pn_encoder_t));
+ pn_error_free(encoder->error);
}
static uint8_t pn_type2code(pn_encoder_t *encoder, pn_type_t type)
@@ -92,7 +79,7 @@ static uint8_t pn_type2code(pn_encoder_t *encoder, pn_type_t type)
case PN_MAP: return PNE_MAP32;
case PN_DESCRIBED: return PNE_DESCRIPTOR;
default:
- return pn_error_format(encoder->error, PN_ERR, "not a value type: %u\n", type);
+ return pn_error_format(pni_encoder_error(encoder), PN_ERR, "not a value type: %u\n", type);
}
}
@@ -338,7 +325,7 @@ static int pni_encoder_enter(void *ctx, pn_data_t *data, pni_node_t *node)
pn_encoder_writef32(encoder, node->children);
return 0;
default:
- return pn_error_format(data->error, PN_ERR, "unrecognized encoding: %u", code);
+ return pn_error_format(pn_data_error(data), PN_ERR, "unrecognized encoding: %u", code);
}
}
diff --git a/c/src/core/encoder.h b/c/src/core/encoder.h
index 20876cb..3a961bf 100644
--- a/c/src/core/encoder.h
+++ b/c/src/core/encoder.h
@@ -22,9 +22,16 @@
*
*/
-typedef struct pn_encoder_t pn_encoder_t;
+typedef struct pn_encoder_t {
+ char *output;
+ char *position;
+ pn_error_t *error;
+ size_t size;
+ unsigned null_count;
+} pn_encoder_t;
-pn_encoder_t *pn_encoder(void);
+void pn_encoder_initialize(pn_encoder_t *encoder);
+void pn_encoder_finalize(pn_encoder_t *encoder);
ssize_t pn_encoder_encode(pn_encoder_t *encoder, pn_data_t *src, char *dst, size_t size);
ssize_t pn_encoder_size(pn_encoder_t *encoder, pn_data_t *src);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org