/* linkedList.h */ /** * Copyright - See the COPYRIGHT that is included with this distribution. * EPICS pvDataCPP is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. */ #ifndef LINKEDLIST_H #define LINKEDLIST_H #include "linkedListVoid.h" namespace epics { namespace pvData { template class LinkedList; template class LinkedListNode : private LinkedListVoidNode { public: LinkedListNode(T *object) : LinkedListVoidNode(object){} ~LinkedListNode() {} T *getObject() { return static_cast(LinkedListVoidNode::getObject());} bool isOnList() {return LinkedListVoidNode::isOnList();} friend class LinkedList; }; template class LinkedList : private LinkedListVoid { public: LinkedList() : LinkedListVoid() {} ~LinkedList() {} int getLength() {return LinkedListVoid::getLength();} void addTail(LinkedListNode *listNode) { LinkedListVoid::addTail(static_cast(listNode)); } void addHead(LinkedListNode *listNode) { LinkedListVoid::addHead(static_cast(listNode)); } void insertAfter(LinkedListNode *listNode, LinkedListNode *addNode) { LinkedListVoid::insertAfter( static_cast(listNode), static_cast(addNode)); } void insertBefore(LinkedListNode *listNode, LinkedListNode *addNode) { LinkedListVoid::insertBefore( static_cast(listNode), static_cast(addNode)); } LinkedListNode *removeTail(){ return static_cast *>(LinkedListVoid::removeTail()); } LinkedListNode *removeHead(){ return static_cast *>(LinkedListVoid::removeHead()); } void remove(LinkedListNode *listNode){ LinkedListVoid::remove(static_cast(listNode)); } void remove(T *object){ LinkedListVoid::remove(object); } LinkedListNode *getHead(){ return static_cast *>(LinkedListVoid::getHead()); } LinkedListNode *getTail(){ return static_cast *>(LinkedListVoid::getTail()); } LinkedListNode *getNext(LinkedListNode *listNode){ return static_cast *>(LinkedListVoid::getNext( static_cast(listNode))); } LinkedListNode *getPrev(LinkedListNode *listNode){ return static_cast *>(LinkedListVoid::getPrev( static_cast(listNode))); } bool isEmpty() { return LinkedListVoid::isEmpty();} bool contains(T *object) { return LinkedListVoid::contains(object);} }; }} #endif /* LINKEDLIST_H */