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