Retire the Java-like List class.

This commit is contained in:
2026-05-05 17:15:56 -04:00
parent 91b559e8a6
commit dc5b173788
5 changed files with 22 additions and 180 deletions
-148
View File
@@ -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
// ---------------