#include <forb/cdr_codec.h>
#include <forb/cdr.h>
#include "forb_utils.h"
+#include <inttypes.h>
+#include "object_type.h"
+#include <forb/types.h>
+#include <forb/server_id.h>
GAVL_CUST_NODE_INT_IMP(forb_objects_nolock /* cust_prefix */,
forb_t /* cust_root_t */,
- struct forb_object /* cust_item_t */,
+ struct _forb_object /* cust_item_t */,
forb_object_key /* cust_key_t */,
objects /* cust_root_node */,
node /* cust_item_node */,
static void
forb_object_release_real(forb_ref_t *ref)
{
- forb_object obj = container_of(ref, struct forb_object, ref);
+ forb_object obj = container_of(ref, struct _forb_object, ref);
if (obj->orb) {
forb_t *forb = forb_object_to_forb(obj);
forb_server_id_to_string(server_id, &obj->server, s);
key = forb_object_to_key(obj);
- snprintf(str, s, "%s-%llx", server_id, key);
+ snprintf(str, s, "%s-%"PRIu64, server_id, key);
return str;
}
if (string[2*sizeof(server_id)] != '-')
return NULL;
- ret = sscanf(&string[2*sizeof(server_id)+1], "%llx", &key);
+ ret = sscanf(&string[2*sizeof(server_id)+1], "%"SCNu64, &key);
if (ret == 0 || ret == EOF)
return NULL;
-
- obj = forb_object_new(orb, &server_id, key);
+
+ // check if the object you want to create is local or not
+ if (!forb_server_id_cmp(&orb->server, &server_id))
+ obj = forb_objects_find(forb_data(orb), key);
+ else
+ obj = forb_object_new(orb, &server_id, key);
return obj;
}
* @return CORBA_TRUE on success, CORBA_FALSE on error.
*/
CORBA_boolean
-forb_object_serialize(CDR_Codec *codec, const forb_object *obj)
+forb_object_serialize(FORB_CDR_Codec *codec, const forb_object *obj)
{
if (!forb_server_id_serialize(codec, &(*obj)->server))
return CORBA_FALSE;
}
/**
- * Creates the object reference by deserialization from ::CDR_Codec.
+ * Creates the object reference by deserialization from ::FORB_CDR_Codec.
*
* @param codec
* @param obj
* @return CORBA_TRUE on success, CORBA_FALSE on error.
*/
CORBA_boolean
-forb_object_deserialize(CDR_Codec *codec, forb_object *obj)
+forb_object_deserialize(FORB_CDR_Codec *codec, forb_object *obj)
{
forb_server_id server_id;
forb_object_key objkey;
return CORBA_FALSE;
if (!codec->orb)
return CORBA_FALSE;
- *obj = forb_object_new(codec->orb, &server_id, objkey);
+
+ // check if the object you want to create is local or not
+ if (!forb_server_id_cmp(&codec->orb->server, &server_id))
+ *obj = forb_objects_find(forb_data(codec->orb), objkey);
+ else
+ *obj = forb_object_new(codec->orb, &server_id, objkey);
return CORBA_TRUE;
}