ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/ccscs20/DoublyLinkedList.hpp
Revision: 13
Committed: 2004-05-15T14:59:28-07:00 (21 years, 1 month ago) by Douglas Thrift
File size: 1420 byte(s)
Log Message:
Take that David!

File Contents

# User Rev Content
1 Douglas Thrift 1 // Doubly Linked List
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #ifndef _DoublyLinkedList_hpp_
8     #define _DoublyLinkedList_hpp_
9    
10     #include "NullNode.hpp"
11     #include "Iterator.hpp"
12    
13     template<typename Type>
14     class DoublyLinkedList
15     {
16     private:
17 Douglas Thrift 3 NullNode<Type> front;
18     NullNode<Type> back;
19 Douglas Thrift 1 public:
20 Douglas Thrift 3 DoublyLinkedList() { front.setNext(&back); back.setPrevious(&front); }
21 Douglas Thrift 8 ~DoublyLinkedList() { while (front.getNext() != &back) front.removeNext(); }
22 Douglas Thrift 4 void addFront(const Type& value) { front.addNext(value); }
23     void addBack(const Type& value) { back.addPrevious(value); }
24 Douglas Thrift 13 bool contains(const Type& value);
25     void removeFirst(const Type& value);
26     void removeLast(const Type& value);
27 Douglas Thrift 7 Iterator<Type> iterator(void) { return Iterator<Type>(&front, &back); }
28 Douglas Thrift 13 void accept(Visitor<Type>* visitor);
29 Douglas Thrift 1 };
30    
31 Douglas Thrift 13 template<typename Type>
32     bool DoublyLinkedList<Type>::contains(const Type& value)
33     {
34     return front.contains(value, dynamic_cast<Node<Type>*>(&back), true);
35     }
36    
37     template<typename Type>
38     void DoublyLinkedList<Type>::removeFirst(const Type& value)
39     {
40     front.remove(value, dynamic_cast<Node<Type>*>(&back), true);
41     }
42    
43     template<typename Type>
44     void DoublyLinkedList<Type>::removeLast(const Type& value)
45     {
46     back.remove(value, dynamic_cast<Node<Type>*>(&front), false);
47     }
48    
49     template<typename Type>
50     void DoublyLinkedList<Type>::accept(Visitor<Type>* visitor)
51     {
52     front.accept(visitor, dynamic_cast<Node<Type>*>(&back), true);
53     }
54    
55 Douglas Thrift 1 #endif // _DoublyLinkedList_hpp_

Properties

Name Value
svn:eol-style native
svn:keywords Id