#ifndef SLIST_H #define SLIST_H template class SList { public: SList() : _next(0) { } protected: static void _add(T* self) { T* tmp = _s_first; _s_first = self; self->_next = tmp; } static void _remove(T* self) { if (_s_first == self) { _s_first = self->_next; self->_next = 0; return; } for (T* prev = _s_first; prev->_next; prev = prev->_next) { if (prev->_next == self) { prev->_next = self->_next; self->_next = 0; return; } } } static T* _s_first; T* _next; }; #endif //SLIST_H