22#include "reference_list.h"
25 class ReferenceListNode {
26 friend class ReferenceList;
27 friend class ReferenceListIterator;
30 ReferenceListNode(
const Reference &ref) : reference(ref), next(NULL) {}
34 ReferenceListNode *next;
37 class ReferenceListHeadNode :
private ReferenceListNode {
38 friend class ReferenceList;
39 friend class ReferenceListIterator;
41 ReferenceListHeadNode(
const Reference &ref) : ReferenceListNode(ref), refcount(1), length(0) {}
52ReferenceList::ReferenceList() :
69 ReferenceList tmp(list);
77 ReferenceListHeadNode *tmpHead = list.head;
81 ReferenceListNode *tmpTail = list.tail;
87void ReferenceList::append(
const Reference& ref)
90 tail = head =
new ReferenceListHeadNode(ref);
92 tail->next =
new ReferenceListNode(ref);
98int ReferenceList::length()
100 return head ? head->length : 0;
103ReferenceList::~ReferenceList()
105 if (head != NULL && --(head->refcount) == 0) {
106 ReferenceListNode *
next;
108 for (ReferenceListNode *p = head; p != NULL; p =
next) {
111 delete (ReferenceListHeadNode *)p;
121 return ReferenceListIterator(head);
126 return ReferenceListIterator(NULL);
133ReferenceListIterator::ReferenceListIterator(ReferenceListNode *n) :
140 return node != it.node;
143const Reference *ReferenceListIterator::operator->()
const
145 return &node->reference;
148const Reference &ReferenceListIterator::operator++(
int )
150 const Reference &ref = node->reference;
An iterator for a ReferenceList.
A list of Reference objects.
Defines a Javascript reference.
const TDEShortcut & next()