/* * Implementation of nested-int-list.h. */ #include #include #include "nested-int-list.h" NestedIntListElemData* NewIntDatum(int i) { NestedIntListElemData* d; d = (NestedIntListElemData*) malloc(sizeof(NestedIntListElemData)); d->data = i; d->sublist = null; return d; } NestedIntListElemData* NewSubListDatum(List* l) { NestedIntListElemData* d; d = (NestedIntListElemData*) malloc(sizeof(NestedIntListElemData)); d->sublist = l; return d; } bool EqualsFunc(void* d1, void* d2) { NestedIntListElemData* nd1 = (NestedIntListElemData*) d1; NestedIntListElemData* nd2 = (NestedIntListElemData*) d2; if ((nd1 == null) || (nd2 == null)) { return false; } if ((nd1->sublist == null) && (nd2->sublist == null) && (nd1->data == nd2->data)) { return true; } return ListEqualsWithFunction(nd1->sublist, nd2->sublist, EqualsFunc); } void PrintFunc(void* d) { NestedIntListElemData* nd = (NestedIntListElemData*) d; if (nd->sublist == null) { printf("%d", nd->data); fflush(stdout); } else { PrintList(nd->sublist, PrintFunc); } } void* CopyFunc(void* d) { NestedIntListElemData* nd = (NestedIntListElemData*) d; if (nd->sublist == null) return nd; return NewSubListDatum(CopyListWithFunction(nd->sublist, CopyFunc)); }