diff options
Diffstat (limited to 'gnu/usr.bin/groff/grohtml/ordered_list.h')
-rw-r--r-- | gnu/usr.bin/groff/grohtml/ordered_list.h | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/gnu/usr.bin/groff/grohtml/ordered_list.h b/gnu/usr.bin/groff/grohtml/ordered_list.h deleted file mode 100644 index 52fe1c9e605..00000000000 --- a/gnu/usr.bin/groff/grohtml/ordered_list.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (C) 1999 Free Software Foundation, Inc. - * - * Ordered list, a template module for simple ordered list manipulation. - * - * Gaius Mulley (gaius@glam.ac.uk) - */ - -template <class T> class list_element -{ - public: - list_element *right; - list_element *left; - - list_element (T *in); - T *data; -}; - -template <class T> class ordered_list -{ - private: - list_element<T> *head; - list_element<T> *tail; - list_element<T> *ptr; - public: - ordered_list (void); - ~ ordered_list (void); - void add (T* in); - void sub_move_right (void); - void move_right (void); - void move_left (void); - int is_empty (void); - int is_equal_to_tail (void); - int is_equal_to_head (void); - void start_from_head (void); - void start_from_tail (void); - T *move_right_get_data (void); - T *move_left_get_data (void); - T *get_data (void); -}; - - -template <class T> ordered_list<T>::ordered_list() - : head(0), tail(0), ptr(0) -{ -} - -template <class T> ordered_list<T>::~ordered_list() -{ - list_element<T> *temp=head; - - do { - temp = head; - if (temp != 0) { - head = head->right; - delete temp; - } - } while ((head != 0) && (head != tail)); -} - -template <class T> list_element<T>::list_element(T *in) - : right(0), left(0) -{ - data = in; -} - -template <class T> void ordered_list<T>::add(T *in) -{ - list_element<T> *t = new list_element<T>(in); // create a new list element with data field initialized - list_element<T> *last; - - if (in == 0) { - fatal("cannot add NULL to ordered list"); - } - - if (head == 0) { - head = t; - tail = t; - t->left = t; - t->right = t; - } else { - last = tail; - - while ((last != head) && (in->is_less(in, last->data))) { - last = last->left; - } - - if (in->is_less(in, last->data)) { - t->right = last; - last->left->right = t; - t->left = last->left; - last->left = t; - // now check for a new head - if (last == head) { - head = t; - } - } else { - // add t onto beyond last - t->right = last->right; - t->left = last; - last->right->left = t; - last->right = t; - // now check for a new tail - if (last == tail) { - tail = t; - } - } - } -} - -template <class T> void ordered_list<T>::sub_move_right (void) -{ - list_element<T> *t=ptr->right; - - if (head == tail) { - head = 0; - if (tail != 0) { - delete tail; - } - tail = 0; - ptr = 0; - } else { - if (head == ptr) { - head = head->right; - } - if (tail == ptr) { - tail = tail->left; - } - ptr->left->right = ptr->right; - ptr->right->left = ptr->left; - ptr=t; - } -} - -template <class T> void ordered_list<T>::start_from_head (void) -{ - ptr = head; -} - -template <class T> void ordered_list<T>::start_from_tail (void) -{ - ptr = tail; -} - -template <class T> int ordered_list<T>::is_empty (void) -{ - return( head == 0 ); -} - -template <class T> int ordered_list<T>::is_equal_to_tail (void) -{ - return( ptr == tail ); -} - -template <class T> int ordered_list<T>::is_equal_to_head (void) -{ - return( ptr == head ); -} - -template <class T> void ordered_list<T>::move_left (void) -{ - ptr = ptr->left; -} - -template <class T> void ordered_list<T>::move_right (void) -{ - ptr = ptr->right; -} - -template <class T> T* ordered_list<T>::get_data (void) -{ - return( ptr->data ); -} - -template <class T> T* ordered_list<T>::move_right_get_data (void) -{ - ptr = ptr->right; - if (ptr == head) { - return( 0 ); - } else { - return( ptr->data ); - } -} - -template <class T> T* ordered_list<T>::move_left_get_data (void) -{ - ptr = ptr->left; - if (ptr == tail) { - return( 0 ); - } else { - return( ptr->data ); - } -} |