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
+36 -18
View File
@@ -49,8 +49,28 @@ 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;
while (node) while (node)
@@ -59,23 +79,21 @@ public:
node = node->getNextListNode(); node = node->getNextListNode();
} }
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
node->setNextListNode(root_); node->setNextListNode(root_);
root_ = node; root_ = node;
} }
/** template <typename T>
* Inserts node A immediately before the node B where template <typename Predicate>
* predicate(B) -> true. void LinkedListRoot<T>::insertBefore(T* node, Predicate predicate)
*/ {
template <typename Predicate>
void insertBefore(T* node, Predicate predicate)
{
assert(node); assert(node);
remove(node); remove(node);
@@ -97,10 +115,11 @@ public:
node->setNextListNode(p->getNextListNode()); node->setNextListNode(p->getNextListNode());
p->setNextListNode(node); p->setNextListNode(node);
} }
} }
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)
{ {
return false; return false;
@@ -125,7 +144,6 @@ public:
} }
return false; return false;
} }
} }
};
} }