Nucleus
Barry List find by index and concat functions c38b2e5 (3 years, 3 months ago)
#ifndef _NUCLEUS_OBJECT_H
#define _NUCLEUS_OBJECT_H
#include <sys/types.h>
#include <stddef.h>
#include <nucleus/cpu.h>
typedef struct Spinlock Spinlock;
typedef struct ObjectType ObjectType;
typedef struct Object Object;
typedef struct ObjectList ObjectList;
typedef struct Task Task;
typedef int (*iterate_callback_t)(void *object, void *data);
/* Spinlock */
struct Spinlock {
char locked;
refcount_t usage;
union {
Task *owner;
cpu_t cpu;
};
};
/* Object Type */
struct ObjectType {
refcount_t usage;
const char *name;
size_t size;
ObjectList *objects;
void *(*alloc)(void);
void (*free)(Object *);
void (*new)(Object *);
void (*delete)(Object *);
void (*copy)(Object *, Object *);
};
/* Object */
struct Object {
ObjectType *type;
refcount_t usage;
Spinlock lock;
};
void *get(void *addr);
void put(void *addr);
void *new(ObjectType *type);
void *copy(void *addr);
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 *get_nth_item(ObjectList *list, off_t n);
void iterate(ObjectList *list, iterate_callback_t callback, void *data);
ObjectList *copy_list(ObjectList *list);
void concat_list(ObjectList *src, ObjectList *dest);
#endif