#ifndef LISTS_H #define LISTS_H #include "../oop.h" typedef Object_t Countable_t; extern interface(Countable) #define Countable_interface size_t (*length)(void*); #define Countable(...) NULL; _Pragma("GCC error \"Cannot make instance of interface Countable.\""); typedef Object_t List_t; extern interface(List) #define List_interface void (*add)(void*, void*); void* (*get)(void*, size_t); void (*remove)(void*, size_t); #define List(...) NULL; _Pragma("GCC error \"Cannot make instance of interface List.\""); typedef Object_t Stack_t; extern interface(Stack) #define Stack_interface void (*push)(void*, void*); void* (*pop)(void*); #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.\""); #endif