00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __WVLINK_H
00009 #define __WVLINK_H
00010
00011 #include <stdlib.h>
00012
00023 class WvLink
00024 {
00025 public:
00026 void *data;
00027 WvLink *next;
00028 char *id;
00029
00030 private:
00031 bool autofree : 1;
00032
00033 public:
00034 WvLink(void *_data, bool _autofree, char *_id = NULL):
00035 data(_data), next(NULL), id(_id), autofree(_autofree)
00036 {}
00037
00038 WvLink(void *_data, WvLink *prev, WvLink *&tail, bool _autofree,
00039 char *_id = NULL);
00040
00041 bool get_autofree()
00042 {
00043 return autofree;
00044 }
00045
00046 void set_autofree(bool _autofree)
00047 {
00048 autofree = _autofree;
00049 }
00050
00051 void unlink(WvLink *prev)
00052 {
00053 prev->next = next;
00054 delete this;
00055 }
00056 };
00057
00058 #define WvIterStuff(_type_) \
00059 \
00060 _type_ &operator () () const \
00061 { return *ptr(); } \
00062 \
00063 _type_ *operator -> () const \
00064 { return ptr(); } \
00065 \
00066 _type_ &operator* () const \
00067 { return *ptr(); }
00068
00069 #endif // __WVLINK_H