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:28 UTC

[qpid-proton] branch master updated (10b5131 -> 9e3c18b)

This is an automated email from the ASF dual-hosted git repository.

astitcher pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git.


    from 10b5131  PROTON-2140: Fill in padding gap in pn_terminus_t to save 32 bytes in pn_link_t
     new 3b84a5b  PROTON-2140: remove encoder & decoder elements from pn_data_t
     new 9e3c18b  PROTON-2140: remove str scratch element from pn_data_t

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 c/src/core/codec.c   | 85 ++++++++++++++++++++++------------------------------
 c/src/core/data.h    |  3 --
 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, 74 insertions(+), 104 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[qpid-proton] 02/02: PROTON-2140: remove str scratch element from pn_data_t

Posted by as...@apache.org.
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 9e3c18b5b84e11e069a97980ac1e602479473bad
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Mon Nov 25 11:08:33 2019 -0500

    PROTON-2140: remove str scratch element from pn_data_t
---
 c/src/core/codec.c | 47 ++++++++++++++++++++---------------------------
 c/src/core/data.h  |  1 -
 2 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/c/src/core/codec.c b/c/src/core/codec.c
index 904fb72..e26ef81 100644
--- a/c/src/core/codec.c
+++ b/c/src/core/codec.c
@@ -86,7 +86,6 @@ static void pn_data_finalize(void *object)
   pn_data_t *data = (pn_data_t *) object;
   free(data->nodes);
   pn_buffer_free(data->buf);
-  pn_free(data->str);
   pn_error_free(data->error);
 }
 
@@ -362,14 +361,6 @@ static int pn_data_inspect(void *obj, pn_string_t *dst)
 #define pn_data_hashcode NULL
 #define pn_data_compare NULL
 
-static inline pn_string_t *pni_data_str(pn_data_t *data)
-{
-  if (data->str == NULL) {
-    data->str = pn_string(NULL);
-  }
-  return data->str;
-}
-
 static inline pn_error_t *pni_data_error(pn_data_t *data)
 {
   if (data->error == NULL) {
@@ -391,7 +382,6 @@ pn_data_t *pn_data(size_t capacity)
   data->base_parent = 0;
   data->base_current = 0;
   data->error = NULL;
-  data->str = NULL;
   return data;
 }
 
@@ -1198,30 +1188,31 @@ int pn_data_scan(pn_data_t *data, const char *fmt, ...)
   return err;
 }
 
-static int pni_data_inspectify(pn_data_t *data)
-{
-  int err = pn_string_set(pni_data_str(data), "");
-  if (err) return err;
-  return pn_data_inspect(data, pni_data_str(data));
-}
-
 int pn_data_print(pn_data_t *data)
 {
-  int err = pni_data_inspectify(data);
-  if (err) return err;
-  printf("%s", pn_string_get(pni_data_str(data)));
+  pn_string_t *str = pn_string("");
+  int err = pn_data_inspect(data, str);
+  if (err) {
+    pn_free(str);
+    return err;
+  }
+  printf("%s", pn_string_get(str));
+  pn_free(str);
   return 0;
 }
 
 int pn_data_format(pn_data_t *data, char *bytes, size_t *size)
 {
-  int err = pni_data_inspectify(data);
+  pn_string_t *str = pn_string("");
+  int err = pn_data_inspect(data, str);
   if (err) return err;
-  if (pn_string_size(pni_data_str(data)) >= *size) {
+  if (pn_string_size(str) >= *size) {
+    pn_free(str);
     return PN_OVERFLOW;
   } else {
-    pn_string_put(pni_data_str(data), bytes);
-    *size = pn_string_size(pni_data_str(data));
+    pn_string_put(str, bytes);
+    *size = pn_string_size(str);
+    pn_free(str);
     return 0;
   }
 }
@@ -1461,12 +1452,13 @@ bool pn_data_lookup(pn_data_t *data, const char *name)
 
 void pn_data_dump(pn_data_t *data)
 {
+  pn_string_t *str = pn_string(0);
   printf("{current=%" PN_ZI ", parent=%" PN_ZI "}\n", (size_t) data->current, (size_t) data->parent);
   for (unsigned i = 0; i < data->size; i++)
   {
     pni_node_t *node = &data->nodes[i];
-    pn_string_set(pni_data_str(data), "");
-    pni_inspect_atom((pn_atom_t *) &node->atom, pni_data_str(data));
+    pn_string_setn(str, "", 0);
+    pni_inspect_atom((pn_atom_t *) &node->atom, str);
     printf("Node %i: prev=%" PN_ZI ", next=%" PN_ZI ", parent=%" PN_ZI ", down=%" PN_ZI 
            ", children=%" PN_ZI ", type=%s (%s)\n",
            i + 1, (size_t) node->prev,
@@ -1474,8 +1466,9 @@ void pn_data_dump(pn_data_t *data)
            (size_t) node->parent,
            (size_t) node->down,
            (size_t) node->children,
-           pn_type_name(node->atom.type), pn_string_get(pni_data_str(data)));
+           pn_type_name(node->atom.type), pn_string_get(str));
   }
+  pn_free(str);
 }
 
 static pni_node_t *pni_data_add(pn_data_t *data)
diff --git a/c/src/core/data.h b/c/src/core/data.h
index 755909e..442760e 100644
--- a/c/src/core/data.h
+++ b/c/src/core/data.h
@@ -51,7 +51,6 @@ struct pn_data_t {
   pni_node_t *nodes;
   pn_buffer_t *buf;
   pn_error_t *error;
-  pn_string_t *str;
   pni_nid_t capacity;
   pni_nid_t size;
   pni_nid_t parent;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[qpid-proton] 01/02: PROTON-2140: remove encoder & decoder elements from pn_data_t

Posted by as...@apache.org.
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