home *** CD-ROM | disk | FTP | other *** search
- #ifndef __ABSLIST_H
- #define __ABSLIST_H
-
- // ╔════════════════════════════════════════════════╗
- // ║ Linklist.h, linklist.cpp ║
- // ╟────────────────────────────────────────────────╢
- // ║ Linked list ║
- // ╟────────────────────────────────────────────────╢
- // ║ Written by Gus Smedstad ║
- // ╟────────────────────────────────────────────────╢
- // ║ Copyright 1990-91 NoGate Consulting ║
- // ╚════════════════════════════════════════════════╝
-
- #ifndef __CONTAIN_H
- #include "contain.h"
- #endif
-
- class link_node {
- public:
- containable *data;
- link_node *next;
- link_node(containable *arg = NULL);
- ~link_node();
-
- containable *item() { return data; };
- void replace(containable *arg) { data = arg; };
- void empty() { data = NULL; };
- };
-
- class abstract_list : public container {
- friend abstract_index;
- protected:
- link_node *head;
- public:
- abstract_list();
- virtual ~abstract_list();
- virtual void put(containable *arg) = 0;
- virtual void destroy();
- void empty(char kill = 0);
- containable *remove();
- int has(containable *arg, int exact = 1);
- abstract_list& operator << (containable *arg)
- { put(arg); return *this; };
- };
-
- class abstract_index {
- protected:
- link_node *data;
- abstract_list *list;
- void put(link_node *);
- public:
- abstract_index(abstract_list & base);
- void attach(abstract_list &base);
- void rewind();
- int has(containable *arg, int exact = 1);
- virtual void destroy();
- containable *remove();
- containable *item() const { return data->item(); };
- void replace(containable *arg) { data->replace(arg); };
- void operator ++ ( int ) { data = data->next; };
- virtual void operator -- ( int );
- operator int() const { return data != NULL; };
- };
-
- #endif