Nucleus
Barry Object Lists + replacing Task Queues 4d3c382 (3 years, 3 months ago)
diff --git a/include/nucleus/object.h b/include/nucleus/object.h
index 3103736..7386984 100644
--- a/include/nucleus/object.h
+++ b/include/nucleus/object.h
@@ -2,15 +2,18 @@
#define _NUCLEUS_OBJECT_H
#include <sys/types.h>
+#include <stddef.h>
#include <nucleus/cpu.h>
+typedef struct Spinlock Spinlock;
typedef struct ObjectType ObjectType;
-struct Object;
typedef struct Object Object;
-typedef struct Spinlock Spinlock;
+typedef struct ObjectList ObjectList;
typedef struct Task Task; /* Just a pointer, no need for full definition */
+typedef int (*callback_t)(void *object, void *data);
+
/* Spinlock */
struct Spinlock {
char locked;
@@ -25,7 +28,10 @@ struct Spinlock {
struct ObjectType {
unsigned int count;
refcount_t usage;
- void *(*new)(void);
+ size_t size;
+ void *(*alloc)(void);
+ void (*free)(Object *);
+ void (*new)(Object *);
void (*delete)(Object *);
};
@@ -36,10 +42,21 @@ struct Object {
Spinlock lock;
};
+extern ObjectType listType;
+
void *get(void *addr);
void put(void *addr);
void *new(ObjectType *type);
void lock(void *addr);
void unlock(void *addr);
+ObjectList *create_list(ObjectType *type);
+void destroy_list(ObjectList *list);
+void add(ObjectList *list, void *addr);
+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);
+
#endif