sequence.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SEQ_H
00021 #define SEQ_H
00022 #include <stdlib.h>
00023 #include <string.h>
00024 #include <stdio.h>
00025 #include <SDL/SDL.h>
00026 #include "xalloc.h"
00027
00028 #define TYPE_IMAGE 0
00029 #define TYPE_MOB 1
00030 #define TYPE_EVENT 2
00031 #define TYPE_WINDOW 3
00032 #define TYPE_INT 4
00033 #define TYPE_UINT32 5
00034 #define TYPE_ARGV 6
00035 #define TYPE_FONT 7
00036 #define TYPE_STRING 8
00037 #define TYPE_TEXT 9
00038 #define TYPE_DISPATCH_PAIR 10
00039 #define TYPE_MOVE_DESCRIPTOR 11
00040 #define TYPE_THREAD_ARGV 12
00041 #define TYPE_DIRECTIVE_T 13
00042 #define TYPE_TILELAYER 14
00043 #define TYPE_IMAGECOUNTER 15
00044 #define TYPE_USER 16
00045
00046
00047
00048
00049
00050
00051 #define CONVERTORS(type,namestr,capitalized_name) inline object make_##namestr##_obj(type foo) \
00052 { \
00053 object o;\
00054 o.data = xmalloc(sizeof(type));\
00055 o.typeinfo = TYPE_##capitalized_name;\
00056 *((type*)o.data) = foo;\
00057 return o;\
00058 }\
00059 inline type \
00060 get_obj_##namestr(object o)\
00061 {\
00062 return *((type*)o.data);\
00063 }
00064
00065
00066
00067
00068
00069
00070 #define S_CONVERTORS(type,capitalized_name) CONVERTORS(type,type,capitalized_name)
00071
00072
00073
00074
00075 typedef struct
00076 {
00077 void *data;
00078 unsigned long typeinfo;
00079 } object;
00080
00081 typedef struct
00082 {
00083 unsigned long objcount;
00084 object *data;
00085 } sequence;
00086
00087 sequence sequence_init(void);
00088 int sequence_append (sequence *seq, object data);
00089 int sequence_position (sequence seq, object data, char (* eqproc) (object, object));
00090 object sequence_find (sequence seq, object data, char (* eqproc) (object, object));
00091 void sequence_remove_at(sequence *seq, int index);
00092 void sequence_remove (sequence *seq, object data, char (* eqproc) (object, object));
00093 sequence sequence_map (sequence seq, object (*proc) (object));
00094 sequence sequence_map_destructive (sequence seq, object (*proc) (object));
00095 void sequence_foreach (sequence seq, void (*proc) (object));
00096 void sequence_free (sequence seq);
00097 object sequence_reduce(sequence seq, object (* proc)(object, object));
00098 object make_int_obj(int i);
00099 int get_obj_int(object o);
00100 object make_Uint32_obj (Uint32 u);
00101 Uint32 get_obj_Uint32(object o);
00102 object make_string_obj(char*);
00103 char* get_obj_string(object);
00104 void free_obj(object o);
00105
00106 #endif