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

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

commit 08668d8043ac89f7880e29792d49e7267f572d94
Author: Andrew Stitcher <[email protected]>
AuthorDate: Tue Apr 26 16:43:29 2022 -0400

    PROTON-2542: Remove reify operation
    
    Turns out the reify operation is really asking the question "What is my
    real class?" And it's only useful if the class is PN_OBJECT. So instead
    of adding a whole sepearate operation and lookup we can just check if
    the class if PN_OBJECT and if it is look up the "real" class.
---
 c/include/proton/object.h    | 16 --------
 c/src/core/engine.c          |  3 --
 c/src/core/event.c           |  6 ++-
 c/src/core/object/map.c      |  6 ---
 c/src/core/object/object.c   | 96 ++++++++++++++++----------------------------
 c/src/core/transport.c       |  1 -
 c/src/proactor/epoll_timer.c |  3 --
 c/src/reactor/reactor.c      |  2 +-
 8 files changed, 40 insertions(+), 93 deletions(-)

diff --git a/c/include/proton/object.h b/c/include/proton/object.h
index fe790631..0412c393 100644
--- a/c/include/proton/object.h
+++ b/c/include/proton/object.h
@@ -59,7 +59,6 @@ struct pn_class_t {
   int (*refcount)(void *);
   void (*finalize)(void *);
   void (*free)(void *);
-  const pn_class_t *(*reify)(void *);
   uintptr_t (*hashcode)(void *);
   intptr_t (*compare)(void *, void *);
   int (*inspect)(void *, pn_string_t *);
@@ -83,7 +82,6 @@ PN_EXTERN extern const pn_class_t PN_WEAKREF[];
     pn_object_refcount,                         \
     PREFIX ## _finalize,                        \
     pn_object_free,                             \
-    pn_object_reify,                            \
     PREFIX ## _hashcode,                        \
     PREFIX ## _compare,                         \
     PREFIX ## _inspect                          \
@@ -99,7 +97,6 @@ PN_EXTERN extern const pn_class_t PN_WEAKREF[];
     PREFIX ## _refcount,                        \
     PREFIX ## _finalize,                        \
     PREFIX ## _free,                            \
-    PREFIX ## _reify,                           \
     PREFIX ## _hashcode,                        \
     PREFIX ## _compare,                         \
     PREFIX ## _inspect                          \
@@ -107,7 +104,6 @@ PN_EXTERN extern const pn_class_t PN_WEAKREF[];
 
 /* Class to identify a plain C struct in a pn_event_t. No refcounting or 
memory management. */
 #define PN_STRUCT_CLASSDEF(PREFIX)                  \
-static const pn_class_t *PREFIX ## _reify(void *p); \
 const pn_class_t PN_CLASSCLASS(PREFIX)[] = {{       \
   #PREFIX,                                          \
   CID_ ## PREFIX,                                   \
@@ -118,14 +114,10 @@ const pn_class_t PN_CLASSCLASS(PREFIX)[] = {{       \
   pn_void_refcount,                                 \
   NULL, /* _finalize */                             \
   NULL, /* _free */                                 \
-  PREFIX ## _reify,                                 \
   pn_void_hashcode,                                 \
   pn_void_compare,                                  \
   pn_void_inspect                                   \
 }};                                                 \
-const pn_class_t *PREFIX ## _reify(void *p) {       \
-  return PN_CLASSCLASS(PREFIX);                     \
-}
 
 PN_EXTERN pn_cid_t pn_class_id(const pn_class_t *clazz);
 PN_EXTERN const char *pn_class_name(const pn_class_t *clazz);
@@ -143,8 +135,6 @@ PN_EXTERN int pn_class_decref(const pn_class_t *clazz, void 
*object);
 
 PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object);
 
-PN_EXTERN const pn_class_t *pn_class_reify(const pn_class_t *clazz, void 
*object);
-PN_EXTERN uintptr_t pn_class_hashcode(const pn_class_t *clazz, void *object);
 PN_EXTERN intptr_t pn_class_compare(const pn_class_t *clazz, void *a, void *b);
 PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b);
 PN_EXTERN int pn_class_inspect(const pn_class_t *clazz, void *object, 
pn_string_t *dst);
@@ -158,7 +148,6 @@ PN_EXTERN intptr_t pn_void_compare(void *a, void *b);
 PN_EXTERN int pn_void_inspect(void *object, pn_string_t *dst);
 
 PN_EXTERN void *pn_object_new(const pn_class_t *clazz, size_t size);
-PN_EXTERN const pn_class_t *pn_object_reify(void *object);
 PN_EXTERN void pn_object_incref(void *object);
 PN_EXTERN int pn_object_refcount(void *object);
 PN_EXTERN void pn_object_decref(void *object);
@@ -174,8 +163,6 @@ PN_EXTERN intptr_t pn_compare(void *a, void *b);
 PN_EXTERN bool pn_equals(void *a, void *b);
 PN_EXTERN int pn_inspect(void *object, pn_string_t *dst);
 
-#define PN_REFCOUNT (0x1)
-
 PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity);
 PN_EXTERN size_t pn_list_size(pn_list_t *list);
 PN_EXTERN void *pn_list_get(pn_list_t *list, int index);
@@ -190,9 +177,6 @@ PN_EXTERN void pn_list_iterator(pn_list_t *list, 
pn_iterator_t *iter);
 PN_EXTERN void pn_list_minpush(pn_list_t *list, void *value);
 PN_EXTERN void *pn_list_minpop(pn_list_t *list);
 
-#define PN_REFCOUNT_KEY (0x2)
-#define PN_REFCOUNT_VALUE (0x4)
-
 PN_EXTERN pn_map_t *pn_map(const pn_class_t *key, const pn_class_t *value,
                            size_t capacity, float load_factor);
 PN_EXTERN size_t pn_map_size(pn_map_t *map);
diff --git a/c/src/core/engine.c b/c/src/core/engine.c
index e5f64497..1f25aadd 100644
--- a/c/src/core/engine.c
+++ b/c/src/core/engine.c
@@ -980,7 +980,6 @@ static void pn_session_finalize(void *object)
 #define pn_session_new pn_object_new
 #define pn_session_refcount pn_object_refcount
 #define pn_session_decref pn_object_decref
-#define pn_session_reify pn_object_reify
 #define pn_session_initialize NULL
 #define pn_session_hashcode NULL
 #define pn_session_compare NULL
@@ -1149,7 +1148,6 @@ static void pn_link_finalize(void *object)
 
 #define pn_link_refcount pn_object_refcount
 #define pn_link_decref pn_object_decref
-#define pn_link_reify pn_object_reify
 #define pn_link_initialize NULL
 #define pn_link_hashcode NULL
 #define pn_link_compare NULL
@@ -1513,7 +1511,6 @@ static void pn_disposition_clear(pn_disposition_t *ds)
 #define pn_delivery_refcount pn_object_refcount
 #define pn_delivery_decref pn_object_decref
 #define pn_delivery_free pn_object_free
-#define pn_delivery_reify pn_object_reify
 #define pn_delivery_initialize NULL
 #define pn_delivery_hashcode NULL
 #define pn_delivery_compare NULL
diff --git a/c/src/core/event.c b/c/src/core/event.c
index 428fc10e..5afd45cd 100644
--- a/c/src/core/event.c
+++ b/c/src/core/event.c
@@ -142,8 +142,6 @@ pn_event_t *pn_collector_put(pn_collector_t *collector,
     return NULL;
   }
 
-  clazz = clazz->reify(context);
-
   pn_event_t *event = (pn_event_t *) pn_list_pop(collector->pool);
 
   if (!event) {
@@ -161,6 +159,10 @@ pn_event_t *pn_collector_put(pn_collector_t *collector,
     collector->head = event;
   }
 
+  if (clazz==PN_OBJECT) {
+    clazz = pn_class(context);
+  }
+
   event->clazz = clazz;
   event->context = context;
   event->type = type;
diff --git a/c/src/core/object/map.c b/c/src/core/object/map.c
index ee306acb..38d64547 100644
--- a/c/src/core/object/map.c
+++ b/c/src/core/object/map.c
@@ -396,7 +396,6 @@ static bool pni_identity_equals(void *a, void *b)
 }
 
 #define CID_pni_uintptr CID_pn_void
-static const pn_class_t *pni_uintptr_reify(void *object);
 #define pni_uintptr_new NULL
 #define pni_uintptr_free NULL
 #define pni_uintptr_initialize NULL
@@ -410,11 +409,6 @@ static int pni_uintptr_refcount(void *object) { return -1; 
}
 
 static const pn_class_t PN_UINTPTR[] = {PN_METACLASS(pni_uintptr)};
 
-static const pn_class_t *pni_uintptr_reify(void *object)
-{
-  return PN_UINTPTR;
-}
-
 pn_hash_t *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor)
 {
   pn_hash_t *hash = (pn_hash_t *) pn_map(PN_UINTPTR, clazz, capacity, 
load_factor);
diff --git a/c/src/core/object/object.c b/c/src/core/object/object.c
index 7164627d..13686a2f 100644
--- a/c/src/core/object/object.c
+++ b/c/src/core/object/object.c
@@ -41,13 +41,20 @@ void pn_void_decref(void* p) {}
 int pn_void_refcount(void *object) { return -1; }
 #define pn_void_finalize NULL
 static void pn_void_free(void *object) { pni_mem_deallocate(PN_VOID, object); }
-static const pn_class_t *pn_void_reify(void *object) { return PN_VOID; }
 uintptr_t pn_void_hashcode(void *object) { return (uintptr_t) object; }
 intptr_t pn_void_compare(void *a, void *b) { return (intptr_t) a - (intptr_t) 
b; }
 int pn_void_inspect(void *object, pn_string_t *dst) { return 
pn_string_addf(dst, "%p", object); }
 
 const pn_class_t PN_VOID[] = {PN_METACLASS(pn_void)};
 
+typedef struct {
+  const pn_class_t *clazz;
+  int refcount;
+} pni_head_t;
+
+#define pni_head(PTR) \
+(((pni_head_t *) (PTR)) - 1)
+
 const char *pn_class_name(const pn_class_t *clazz)
 {
   return clazz->name;
@@ -70,9 +77,11 @@ void *pn_class_new(const pn_class_t *clazz, size_t size)
 
 void *pn_class_incref(const pn_class_t *clazz, void *object)
 {
-  assert(clazz);
   if (object) {
-    clazz = clazz->reify(object);
+    if (clazz==PN_OBJECT) {
+      clazz = pni_head(object)->clazz;
+    }
+
     clazz->incref(object);
   }
   return object;
@@ -80,17 +89,20 @@ void *pn_class_incref(const pn_class_t *clazz, void *object)
 
 int pn_class_refcount(const pn_class_t *clazz, void *object)
 {
-  assert(clazz);
-  clazz = clazz->reify(object);
+  if (clazz==PN_OBJECT) {
+    clazz = pn_class(object);
+  }
+
   return clazz->refcount(object);
 }
 
 int pn_class_decref(const pn_class_t *clazz, void *object)
 {
-  assert(clazz);
-
   if (object) {
-    clazz = clazz->reify(object);
+    if (clazz==PN_OBJECT) {
+      clazz = pni_head(object)->clazz;
+    }
+
     clazz->decref(object);
     int rc = clazz->refcount(object);
     if (rc == 0) {
@@ -114,9 +126,11 @@ int pn_class_decref(const pn_class_t *clazz, void *object)
 
 void pn_class_free(const pn_class_t *clazz, void *object)
 {
-  assert(clazz);
   if (object) {
-    clazz = clazz->reify(object);
+    if (clazz==PN_OBJECT) {
+      clazz = pni_head(object)->clazz;
+    }
+
     int rc = clazz->refcount(object);
     assert(rc == 1 || rc == -1);
     if (rc == 1) {
@@ -131,40 +145,19 @@ void pn_class_free(const pn_class_t *clazz, void *object)
   }
 }
 
-const pn_class_t *pn_class_reify(const pn_class_t *clazz, void *object)
-{
-  assert(clazz);
-  return clazz->reify(object);
-}
-
-uintptr_t pn_class_hashcode(const pn_class_t *clazz, void *object)
-{
-  assert(clazz);
-
-  if (!object) return 0;
-
-  clazz = clazz->reify(object);
-
-  if (clazz->hashcode) {
-    return clazz->hashcode(object);
-  } else {
-    return (uintptr_t) object;
-  }
-}
-
 intptr_t pn_class_compare(const pn_class_t *clazz, void *a, void *b)
 {
-  assert(clazz);
-
   if (a == b) return 0;
 
-  clazz = clazz->reify(a);
-
-  if (a && b && clazz->compare) {
-    return clazz->compare(a, b);
-  } else {
-    return (intptr_t) a - (intptr_t) b;
+  if (a && b) {
+    if (clazz==PN_OBJECT) {
+      clazz = pni_head(a)->clazz;
+    }
+    if (clazz->compare) {
+      return clazz->compare(a, b);
+    }
   }
+  return (intptr_t) a - (intptr_t) b;
 }
 
 bool pn_class_equals(const pn_class_t *clazz, void *a, void *b)
@@ -174,9 +167,9 @@ bool pn_class_equals(const pn_class_t *clazz, void *a, void 
*b)
 
 int pn_class_inspect(const pn_class_t *clazz, void *object, pn_string_t *dst)
 {
-  assert(clazz);
-
-  clazz = clazz->reify(object);
+  if (clazz==PN_OBJECT) {
+      clazz = pni_head(object)->clazz;
+  }
 
   if (!pn_string_get(dst)) {
     pn_string_set(dst, "");
@@ -191,14 +184,6 @@ int pn_class_inspect(const pn_class_t *clazz, void 
*object, pn_string_t *dst)
   return pn_string_addf(dst, "%s<%p>", name, object);
 }
 
-typedef struct {
-  const pn_class_t *clazz;
-  int refcount;
-} pni_head_t;
-
-#define pni_head(PTR) \
-  (((pni_head_t *) (PTR)) - 1)
-
 void *pn_object_new(const pn_class_t *clazz, size_t size)
 {
   void *object = NULL;
@@ -211,14 +196,6 @@ void *pn_object_new(const pn_class_t *clazz, size_t size)
   return object;
 }
 
-const pn_class_t *pn_object_reify(void *object)
-{
-  if (object) {
-    return pni_head(object)->clazz;
-  } else {
-    return PN_OBJECT;
-  }
-}
 
 void pn_object_incref(void *object)
 {
@@ -299,9 +276,6 @@ int pn_inspect(void *object, pn_string_t *dst)
 static void pn_weakref_incref(void *object) {}
 static void pn_weakref_decref(void *object) {}
 static int pn_weakref_refcount(void *object) { return -1; }
-static const pn_class_t *pn_weakref_reify(void *object) {
-  return PN_WEAKREF;
-}
 static uintptr_t pn_weakref_hashcode(void *object) {
   return pn_hashcode(object);
 }
diff --git a/c/src/core/transport.c b/c/src/core/transport.c
index 49d15d07..0e101982 100644
--- a/c/src/core/transport.c
+++ b/c/src/core/transport.c
@@ -538,7 +538,6 @@ static void pn_transport_finalize(void *object);
 #define pn_transport_new pn_object_new
 #define pn_transport_refcount pn_object_refcount
 #define pn_transport_decref pn_object_decref
-#define pn_transport_reify pn_object_reify
 #define pn_transport_hashcode NULL
 #define pn_transport_compare NULL
 #define pn_transport_inspect NULL
diff --git a/c/src/proactor/epoll_timer.c b/c/src/proactor/epoll_timer.c
index 4a68ce1c..8a6f98b3 100644
--- a/c/src/proactor/epoll_timer.c
+++ b/c/src/proactor/epoll_timer.c
@@ -83,8 +83,6 @@ typedef struct timer_deadline_t {
   bool resequenced;            // An out-of-order connection timeout caught 
and handled.
 } timer_deadline_t;
 
-static const pn_class_t *timer_deadline_reify(void *p);
-
 // The pn_list_t calls this to maintain its sorted heap.
 static intptr_t timer_deadline_compare(void *oa, void *ob) {
   timer_deadline_t *a = (timer_deadline_t *) oa;
@@ -104,7 +102,6 @@ static intptr_t timer_deadline_compare(void *oa, void *ob) {
 #define timer_deadline_inspect NULL
 
 static const pn_class_t timer_deadline_clazz = PN_METACLASS(timer_deadline);
-static const pn_class_t *timer_deadline_reify(void *p) { return 
&timer_deadline_clazz; }
 
 static timer_deadline_t* timer_deadline_t_new(void) {
   // Just the struct.  Not a Proton class based object.
diff --git a/c/src/reactor/reactor.c b/c/src/reactor/reactor.c
index 27f2c717..b1326739 100644
--- a/c/src/reactor/reactor.c
+++ b/c/src/reactor/reactor.c
@@ -310,7 +310,7 @@ pn_reactor_t *pn_class_reactor(const pn_class_t *clazz, 
void *object) {
 }
 
 pn_reactor_t *pn_object_reactor(void *object) {
-  return pn_class_reactor(pn_object_reify(object), object);
+  return pn_class_reactor(pn_class(object), object);
 }
 
 pn_reactor_t *pn_event_reactor(pn_event_t *event) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to