BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 7a0d3efda0953d2296a36652babef51441b5ef20 / include / nucleus / object.h

// Related

Nucleus

Barry Doubly-linked object lists and copying 7a0d3ef (3 years, 3 months ago)
diff --git a/include/nucleus/object.h b/include/nucleus/object.h
index 63ac2ac..7f9554c 100644
--- a/include/nucleus/object.h
+++ b/include/nucleus/object.h
@@ -10,9 +10,9 @@ typedef struct ObjectType ObjectType;
 typedef struct Object Object;
 typedef struct ObjectList ObjectList;
 
-typedef struct Task Task; /* Just a pointer, no need for full definition */
+typedef struct Task Task;
 
-typedef int (*callback_t)(void *object, void *data);
+typedef int (*iterate_callback_t)(void *object, void *data);
 
 /* Spinlock */
 struct Spinlock {
@@ -26,7 +26,6 @@ struct Spinlock {
 
 /* Object Type */
 struct ObjectType {
-	unsigned int count;
 	refcount_t usage;
 	size_t size;
 	ObjectList *objects;
@@ -34,6 +33,7 @@ struct ObjectType {
 	void (*free)(Object *);
 	void (*new)(Object *);
 	void (*delete)(Object *);
+	void (*copy)(Object *, Object *);
 };
 
 /* Object */
@@ -46,6 +46,7 @@ struct Object {
 void *get(void *addr);
 void put(void *addr);
 void *new(ObjectType *type);
+void *copy(void *addr);
 void lock(void *addr);
 void unlock(void *addr);
 
@@ -56,6 +57,7 @@ void remove(ObjectList *list, void *addr);
 void *pop_from_start(ObjectList *list);
 void *pop_from_end(ObjectList *list);
 size_t count(ObjectList *list);
-void iterate(ObjectList *list, callback_t callback, void *data);
+void iterate(ObjectList *list, iterate_callback_t callback, void *data);
+ObjectList *copy_list(ObjectList *list);
 
 #endif