9 |
|
|
10 |
|
#include "Node.hpp" |
11 |
|
|
12 |
< |
template <typename Type> |
12 |
> |
template<typename Type> |
13 |
|
class NullNode : public Node<Type> |
14 |
|
{ |
15 |
|
private: |
16 |
|
bool null; |
17 |
– |
NullNode<Type>* next; |
18 |
– |
NullNode<Type>* previous; |
17 |
|
public: |
18 |
|
NullNode() : null(true) {} |
19 |
< |
NullNode(const Type& value) : Node<Type>::Node(value), null(true) {} |
19 |
> |
NullNode(const Type& value) : Node<Type>::Node(value), null(false) {} |
20 |
|
~NullNode() {} |
21 |
< |
void addNext(const Type& value); |
24 |
< |
void addPrevious(const Type& value); |
25 |
< |
void removeNext(void); |
26 |
< |
void removePrevious(void); |
27 |
< |
void setNext(NullNode<Type>* next) { this->next = next; } |
28 |
< |
void setPrevious(NullNode<Type>* previous) { this->previous = previous; } |
29 |
< |
NullNode<Type>* getNext(void) const { return next; } |
30 |
< |
NullNode<Type>* getPrevious(void) const { return next; } |
21 |
> |
bool contains(const Type& value, NullNode<Type>* end); |
22 |
|
}; |
23 |
|
|
24 |
|
template<typename Type> |
25 |
< |
void NullNode<Type>::removeNext(void) |
35 |
< |
{ |
36 |
< |
NullNode<Type>* behind = next->next; |
37 |
< |
|
38 |
< |
delete next; |
39 |
< |
|
40 |
< |
next = behind; |
41 |
< |
} |
42 |
< |
|
43 |
< |
template<typename Type> |
44 |
< |
void NullNode<Type>::removePrevious(void) |
25 |
> |
bool NullNode<Type>::contains(const Type& value, NullNode<Type>* end) |
26 |
|
{ |
27 |
< |
NullNode<Type>* ahead = previous->previous; |
28 |
< |
|
48 |
< |
delete previous; |
27 |
> |
NullNode<Type>* another = Node<Type>::getNext() != NULL ? |
28 |
> |
Node<Type>::getNext() : Node<Type>::getPrevious(); |
29 |
|
|
30 |
< |
previous = ahead; |
30 |
> |
if (null && end == this) |
31 |
> |
{ |
32 |
> |
return false; |
33 |
> |
} |
34 |
> |
else if (!null && value == Node<Type>::getValue()) |
35 |
> |
{ |
36 |
> |
return true; |
37 |
> |
} |
38 |
> |
else return another->contains(value, end); |
39 |
|
} |
40 |
|
|
41 |
|
#endif // _NullNode_hpp_ |