BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 4d3c382801026ca46da937de6d7261f1f6805d9e / include

// Related

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
diff --git a/include/nucleus/task.h b/include/nucleus/task.h
index f017d11..3548782 100644
--- a/include/nucleus/task.h
+++ b/include/nucleus/task.h
@@ -8,7 +8,6 @@
 #include <nucleus/memory.h>
 
 typedef struct Task Task;
-typedef struct TaskQueue TaskQueue;
 
 /* Task priorities */
 enum Priority {
@@ -36,11 +35,9 @@ struct Task {
 
 	uintptr_t esp, ebp, eip;
 	page_dir_t pageDir;
-	Task *next;
 };
 
 extern ObjectType taskType;
-extern ObjectType taskQueueType;
 
 extern Task *currentTask[];
 #define current currentTask[CPUID]
@@ -49,9 +46,4 @@ void init_tasking(void);
 void schedule(void);
 pid_t clone(int flags);
 
-void add_to_queue(TaskQueue *queue, Task *task);
-void remove_from_queue(TaskQueue *queue, Task *task);
-Task *pop_from_queue(TaskQueue *queue);
-size_t tasks_in_queue(TaskQueue *queue);
-
 #endif