2017-03-12 00:18:08 +00:00
|
|
|
#ifndef LISTS_H
|
|
|
|
#define LISTS_H
|
|
|
|
|
|
|
|
#include "../oop.h"
|
|
|
|
|
2017-03-12 17:58:29 +00:00
|
|
|
typedef Object_t Countable_t;
|
2017-03-12 00:18:08 +00:00
|
|
|
extern interface(Countable)
|
|
|
|
#define Countable_interface size_t (*length)(void*);
|
2017-03-12 17:58:29 +00:00
|
|
|
#define Countable(...) NULL; _Pragma("GCC error \"Cannot make instance of interface Countable.\"");
|
|
|
|
|
|
|
|
typedef Object_t List_t;
|
2017-03-12 00:18:08 +00:00
|
|
|
extern interface(List)
|
|
|
|
#define List_interface void (*add)(void*, void*); void* (*get)(void*, size_t); void (*remove)(void*, size_t);
|
2017-03-12 17:58:29 +00:00
|
|
|
#define List(...) NULL; _Pragma("GCC error \"Cannot make instance of interface List.\"");
|
|
|
|
|
|
|
|
typedef Object_t Stack_t;
|
2017-03-12 00:18:08 +00:00
|
|
|
extern interface(Stack)
|
|
|
|
#define Stack_interface void (*push)(void*, void*); void* (*pop)(void*);
|
2017-03-12 17:58:29 +00:00
|
|
|
#define Stack(...) NULL; _Pragma("GCC error \"Cannot make instance of interface Stack.\"");
|
|
|
|
|
|
|
|
typedef struct iterator_args {
|
|
|
|
void* list;
|
|
|
|
void* parameter;
|
|
|
|
void* obj;
|
|
|
|
int num; // -1 if no id
|
|
|
|
} iterator_args;
|
|
|
|
|
|
|
|
typedef bool (*iterator)(iterator_args);
|
|
|
|
|
|
|
|
typedef Object_t Iterateable_t;
|
|
|
|
extern interface(Iterateable)
|
|
|
|
#define Iterateable_interface bool (*iterate)(void*, iterator, void*)
|
|
|
|
#define Iterateable(...) NULL; _Pragma("GCC error \"Cannot make instance of interface Iterateable.\"");
|
2017-03-12 00:18:08 +00:00
|
|
|
|
|
|
|
#endif
|