Retire the Java-like List class.
This commit is contained in:
@@ -292,154 +292,6 @@ Collection0::AbstractIterator* Vector::createIterator()
|
||||
return new VectorIterator(this);
|
||||
}
|
||||
|
||||
// ------------
|
||||
// List
|
||||
// ------------
|
||||
|
||||
List::List(bool ownerOfObjects)
|
||||
{
|
||||
this->ownerOfObjects = ownerOfObjects;
|
||||
first = last = NULL;
|
||||
numElements = 0;
|
||||
}
|
||||
|
||||
List::~List()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
int List::size ()
|
||||
{
|
||||
return numElements;
|
||||
}
|
||||
|
||||
bool List::equals(const Object *other) const
|
||||
{
|
||||
List *otherList = (List*)other;
|
||||
Node *node1 = first, *node2 = otherList->first;
|
||||
while (node1 != NULL && node2 != NULL ) {
|
||||
if (!node1->object->equals (node2->object))
|
||||
return false;
|
||||
node1 = node1->next;
|
||||
node2 = node2->next;
|
||||
}
|
||||
return node1 == NULL && node2 == NULL;
|
||||
}
|
||||
|
||||
int List::hashValue()
|
||||
{
|
||||
int h = 0;
|
||||
for (Node *node = first; node; node = node->next)
|
||||
h = h ^ node->object->hashValue ();
|
||||
return h;
|
||||
}
|
||||
|
||||
void List::clear()
|
||||
{
|
||||
while (first) {
|
||||
if (ownerOfObjects && first->object)
|
||||
delete first->object;
|
||||
Node *next = first->next;
|
||||
delete first;
|
||||
first = next;
|
||||
}
|
||||
|
||||
last = NULL;
|
||||
numElements = 0;
|
||||
}
|
||||
|
||||
void List::append(Object *element)
|
||||
{
|
||||
Node *newLast = new Node;
|
||||
newLast->next = NULL;
|
||||
newLast->object = element;
|
||||
|
||||
if (last) {
|
||||
last->next = newLast;
|
||||
last = newLast;
|
||||
} else
|
||||
first = last = newLast;
|
||||
|
||||
numElements++;
|
||||
}
|
||||
|
||||
bool List::insertBefore(object::Object *beforeThis, object::Object *neew)
|
||||
{
|
||||
Node *beforeCur, *cur;
|
||||
|
||||
for (beforeCur = NULL, cur = first; cur; beforeCur = cur, cur = cur->next) {
|
||||
if (cur->object == beforeThis) {
|
||||
Node *newNode = new Node;
|
||||
newNode->next = cur;
|
||||
newNode->object = neew;
|
||||
|
||||
if (beforeCur)
|
||||
beforeCur->next = newNode;
|
||||
else
|
||||
first = newNode;
|
||||
|
||||
numElements++;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool List::remove0(Object *element, bool compare, bool doNotDeleteAtAll)
|
||||
{
|
||||
Node *beforeCur, *cur;
|
||||
|
||||
for (beforeCur = NULL, cur = first; cur; beforeCur = cur, cur = cur->next) {
|
||||
if (compare ?
|
||||
(cur->object && element->equals(cur->object)) :
|
||||
element == cur->object) {
|
||||
if (beforeCur) {
|
||||
beforeCur->next = cur->next;
|
||||
if (cur->next == NULL)
|
||||
last = beforeCur;
|
||||
} else {
|
||||
first = cur->next;
|
||||
if (first == NULL)
|
||||
last = NULL;
|
||||
}
|
||||
|
||||
if (ownerOfObjects && cur->object && !doNotDeleteAtAll)
|
||||
delete cur->object;
|
||||
delete cur;
|
||||
|
||||
numElements--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Object *List::ListIterator::getNext()
|
||||
{
|
||||
Object *object;
|
||||
|
||||
if (current) {
|
||||
object = current->object;
|
||||
current = current->next;
|
||||
} else
|
||||
object = NULL;
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
bool List::ListIterator::hasNext()
|
||||
{
|
||||
return current != NULL;
|
||||
}
|
||||
|
||||
Collection0::AbstractIterator* List::createIterator()
|
||||
{
|
||||
return new ListIterator(first);
|
||||
}
|
||||
|
||||
|
||||
// ---------------
|
||||
// HashSet
|
||||
// ---------------
|
||||
|
||||
Reference in New Issue
Block a user