Avoid calling Object_isA from inside Vector_isConsistent

This commit is contained in:
Benny Baumann 2020-11-17 01:27:27 +01:00 committed by BenBE
parent 307c34b028
commit a94fd87b05
3 changed files with 8 additions and 11 deletions

View File

@ -21,13 +21,10 @@ bool Object_isA(const Object* o, const ObjectClass* klass) {
if (!o)
return false;
const ObjectClass* type = o->klass;
while (type) {
for (const ObjectClass* type = o->klass; type; type = type->extends) {
if (type == klass) {
return true;
}
type = type->extends;
}
return false;

View File

@ -48,16 +48,16 @@ void Vector_delete(Vector* this) {
static bool Vector_isConsistent(const Vector* this) {
assert(this->items <= this->arraySize);
if (this->owner) {
for (int i = 0; i < this->items; i++) {
if (this->array[i] && !Object_isA(this->array[i], this->type)) {
if (!this->array[i]) {
return false;
}
}
return true;
} else {
return true;
}
return true;
}
unsigned int Vector_count(const Vector* this) {
@ -71,10 +71,10 @@ unsigned int Vector_count(const Vector* this) {
return items;
}
Object* Vector_get(Vector* this, int idx) {
Object* Vector_get(const Vector* this, int idx) {
assert(idx >= 0 && idx < this->items);
assert(Vector_isConsistent(this));
assert(this->array[idx]);
assert(Object_isA(this->array[idx], this->type));
return this->array[idx];
}

View File

@ -52,7 +52,7 @@ void Vector_set(Vector* this, int idx, void* data_);
#ifndef NDEBUG
Object* Vector_get(Vector* this, int idx);
Object* Vector_get(const Vector* this, int idx);
int Vector_size(const Vector* this);
unsigned int Vector_count(const Vector* this);