19#include "tbci/basics.h"
27# pragma interface "list.h"
59template <
typename T>
class List;
85 operator bool ()
const;
220 return !(*
this == li);
242 return !(*
this <= li);
248 return !(*
this < li);
267 const unsigned long nr)
346 unsigned long size ()
const;
349 unsigned long getnr (
const T*)
const;
350 unsigned long getnr ()
const;
445 *tmp = *data;
return tmp;
564 while (!(
last->data == delroot)) {
569 fprintf(stderr,
"List::deltree: error: wrong pointer provided !\n");
571 STD__ cerr <<
"List::deltree: error: wrong pointer provided !" <<
'\n';
631 else return curr->next->data; }
636 else return curr->prev->data; }
676 unsigned int ctr = 0;
679 if (rec == ptr->
data)
break;
711 if (rec == ptr->
data)
return cntr;
752 printf (
"Elem:%p Prev:%p Next:%p Data:%p\n", tmp, tmp->
prev, tmp->
next, tmp->
data);
760# define EQDOUBLE = double
769template <
typename T,
typename S EQDOUBLE>
782 void qsort (
bool =
false);
787template <
typename T,
typename S>
793 S test = (S)(((
double)le->
data->getval()+(
double)ri->
data->getval())/2);
809 while ((
dir?le->
data->getval()>test:le->
data->getval()<test)) {
817 while ((
dir? ri->
data->getval() < test: ri->
data->getval() > test)) {
827 le = le->
next;
if (le == ri) lesri = 0;
829 if (lesri == 0) lesri = -1;
830 else if (le == ri) lesri = 0;
832 else if (lesri == 0) {
853template <
typename T,
typename S>
862template <
class T,
class S>
865 bool sortedin =
false;
868 bool comp = (dat.getval() < ptr2->
data->getval()) ^
dir;
873 fprintf (stderr,
"Not yet implemented !\n");
875 STD__ cerr <<
"Not yet implemented !\n";
883 if (!comp)
return ptr2->
data;
887 if (!ptr2)
return last->data;
890 while (ptr2 && !sortedin) {
891 comp = (dat.getval() < ptr2->
data->getval()) ^
dir;
921template <
typename T,
typename S>
935 && (!next || next->
data->getval() >= val))
940 while (next->
next && next->
data->getval() < val) {
943 if (
curr->next != next) {
948 while (
curr->prev &&
curr->data->getval() > val) {
957 && (!next || next->
data->getval() <= val))
962 while (next->
next && next->
data->getval() > val) {
965 if (
curr->next != next) {
970 while (
curr->prev &&
curr->data->getval() < val) {
void deltree(T *)
Deletes List from item to end.
unsigned long size() const
T * setcurr(const T *rec) const
ListIterator< T > iterator
List< T > & operator=(const List< T > &)
List< T > & alias(const List< T > &)
unsigned long getcurrnr() const
Note that the numbers are 1-based.
T * setcurrnr(const unsigned long) const
unsigned long getnr(const T *) const
unsigned long getnr() const
unsigned long getlength() const
ListRIterator< T > riterator
bool operator<(const ListIterator< T > &li) const
bool operator<=(const ListIterator< T > &li) const
ListIterator< T > & operator--()
ListIterator< T > & operator++()
bool operator!=(const ListIterator< T > &li) const
ListIterator(const ListIterator< T > &li)
bool operator==(const ListIterator< T > &li) const
ListIterator< T > & operator=(const ListIterator< T > &)
bool operator>=(const ListIterator< T > &li) const
ListIterator(const List< T > &_list, T *dataptr=0)
bool operator>(const ListIterator< T > &li) const
ListRIterator(const List< T > &_list, T *dataptr)
ListRIterator(const List< T > &_list, ListItem< T > *li)
ListRIterator(const List< T > &_list, ListItem< T > *li, const unsigned long nr)
ListRIterator< T > & operator=(const ListIterator< T > &)
void quick(ListItem< T > *, ListItem< T > *)
void qsort(bool=false)
Quicksort is really quick: sorts 1 000 000 records (int) in less than 50 secs on a 486DX4/100 under L...
T * sortin_r(T &, bool=false)
long move_window(const S &val) const