#ifndef OPP_BIDXLIST_H #ifndef OPP_BIDXLIST_H template class bindexlist { public: char _free; char _pred[n], _succ[n]; T _data[n]; class iterator { public: bindexlist * _l; char _i; iterator(void) : _l(nullptr) {} iterator(bindexlist * l, char i) : _l(l), _i(i) {} iterator(const iterator & li) : _l(li._l), _i(li._i) {} iterator & operator=(const iterator & li) { _l = li._l; _i = li._i; return *this; } T & operator*() { return _l->_data[_i]; } T * operator->() { return _l->_data + _i; } iterator & operator++(void) { _i = _l->_succ[_i]; return *this; } iterator operator++(int) { char i = _i; _i = _l->_succ[_i]; return bindexlist::iterator(_l, i); } iterator & operator+=(char n) { while (n--) _i = _l->_succ[_i]; return *this; } iterator & operator--(void) { _i = _l->_pred[_i]; return *this; } iterator operator++(int) { char i = _i; _i = _l->_pred[_i]; return bindexlist::iterator(_l, i); } iterator & operator-=(char n) { while (n--) _i = _l->_pred[_i]; return *this; } bool operator==(const iterator & li) { return _i == li._i; } bool operator!=(const iterator & li) { return _i != li._i; } }; public: typedef T element_type; typedef iterator iterator_type; bindexlist(void) { _succ[0] = 0; _pred[0] = 0; for(char i=1; i