(MOD) Removed Array_GetIdx and Array_SetIdx due to better approach was discovered.

(MOD) Defined 2 more statuses:  InvalidOperation, InvalidOperationBetweenAliveAndNonAlive.

(MOD) Defined 1 more macro:  assign.
This commit is contained in:
2024-06-26 20:20:04 +08:00
parent a63063de42
commit 310586ab86
5 changed files with 109 additions and 15 deletions

View File

@@ -15,8 +15,8 @@ DEFSTATUS(InvalidArrayLength, 1, "Given length is invalid.", STATUS_ERROR, &Erro
Status Array_Create(Array *inst, int len, size_t size);
Status Array_CopyOf(Array *inst, Array *other);
void Array_Delete(Array *inst);
Status Array_GetIdx(Array *inst, Var *store, int index);
Status Array_SetIdx(Array *inst, Var *source, int index);
// Status Array_GetIdx(Array *inst, Var *store, int index);
// Status Array_SetIdx(Array *inst, Var *source, int index);
bool Array_Equals(Array *arr1, Array *arr2);
Status ArrayUtils_Insert(Array *inst, Var *item, int index);

View File

@@ -91,7 +91,7 @@ Status Array_CopyOf(Array *inst, Array *other)
/* Release the array inst. */
free(inst->members);
return errstat;
return apply(errstat);
}
/* Assign rest of the struct members. */
@@ -115,9 +115,37 @@ void Array_Delete(Array *inst)
inst->len = 0;
}
Status Array_GetIdx(Array *inst, Var *store, int index);
// Status Array_GetIdx(Array *inst, Var *store, int index)
// {
// nonull(inst, apply(UnavailableInstance));
// nonull(store, apply(annot(UnavailableParameter,
// "Given store was unavailable.")));
// state(!store->alive, apply(annot(InstanceNotAlive,
// "Cannot store into a non-alive var.")));
// state(index >= inst->len || index < 0, apply(ArrayIndexOutOfBound));
// // *store = inst->members[index];
// store->addr = inst->members[index].addr;
// store->size = inst->members[index].size;
// return apply(NormalStatus);
// }
Status Array_SetIdx(Array *inst, Var *source, int index);
// Status Array_SetIdx(Array *inst, Var *source, int index)
// {
// nonull(inst, apply(UnavailableInstance));
// nonull(source, apply(annot(UnavailableParameter,
// "Given store was unavailable.")));
// state(!source->alive, apply(annot(InstanceNotAlive,
// "Cannot assign with a non-alive var.")));
// state(index >= inst->len || index < 0, apply(ArrayIndexOutOfBound));
// // inst->members[index] = *source;
// inst->members[index].addr = source->addr;
// inst->members[index].size = source->size;
// return apply(NormalStatus);
// }
bool Array_Equals(Array *arr1, Array *arr2);