// C++ code Copyright (C) David R. Evans G4AMJ/NQ0I #ifndef LISTH #define LISTH class link { friend class glist; link *previous, *next; void *data; }; class glist { link *first, *last, *recent; int index, list_length; public: glist(); ~glist(); inline int length(void) const { return list_length; } ; void operator+=(void*); void* operator[](const int); void operator-=(void*); void operator=(glist&); void clear(void); void clear_and_destroy(void); }; // make it all type safe (except on the Mac) #ifndef macintosh template class list { glist _list; public: inline int length(void) const { return _list.length(); } inline void operator+=(const T& new_entry) { _list += (void*)(T*)&new_entry; } inline T& operator[](const int n) { return *(T*)_list[n]; } inline void operator-=(const T& old_entry) { _list -= (void*)(T*)&old_entry; } inline void operator=(list& old_list) { _list = old_list._list; } }; #endif #endif