Out of line methods in linked_list.hpp

This commit is contained in:
Pavel Kirienko
2014-04-08 18:59:15 +04:00
parent a32d0d335c
commit e6559eff9f
+27 -9
View File
@@ -49,7 +49,27 @@ public:
T* get() const { return root_; } T* get() const { return root_; }
bool isEmpty() const { return get() == NULL; } bool isEmpty() const { return get() == NULL; }
unsigned getLength() const unsigned getLength() const;
void insert(T* node);
/**
* Inserts node A immediately before the node B where
* predicate(B) -> true.
*/
template <typename Predicate>
void insertBefore(T* node, Predicate predicate);
bool remove(const T* node);
};
// ----------------------------------------------------------------------------
/*
* LinkedListRoot<>
*/
template <typename T>
unsigned LinkedListRoot<T>::getLength() const
{ {
T* node = root_; T* node = root_;
unsigned cnt = 0; unsigned cnt = 0;
@@ -61,7 +81,8 @@ public:
return cnt; return cnt;
} }
void insert(T* node) template <typename T>
void LinkedListRoot<T>::insert(T* node)
{ {
assert(node); assert(node);
remove(node); // Making sure there will be no loops remove(node); // Making sure there will be no loops
@@ -69,12 +90,9 @@ public:
root_ = node; root_ = node;
} }
/** template <typename T>
* Inserts node A immediately before the node B where
* predicate(B) -> true.
*/
template <typename Predicate> template <typename Predicate>
void insertBefore(T* node, Predicate predicate) void LinkedListRoot<T>::insertBefore(T* node, Predicate predicate)
{ {
assert(node); assert(node);
remove(node); remove(node);
@@ -99,7 +117,8 @@ public:
} }
} }
bool remove(const T* node) template <typename T>
bool LinkedListRoot<T>::remove(const T* node)
{ {
if (root_ == NULL || node == NULL) if (root_ == NULL || node == NULL)
{ {
@@ -126,6 +145,5 @@ public:
return false; return false;
} }
} }
};
} }