TableList.C
#include<stdio.h>
#include “list.h”
#include “TableList.h”
voidInitTable(Table *T, unsigned SizeBuf, unsigned SizeEl)
{ unsignedi;
T->Buf = (List*)calloc(SizeBuf, sizeof(List));
T->n = 0;
T->SizeBuf = SizeBuf;
T->SizeEl = SizeEl;
for(I = 0; i<SizeBuf; i++) {
InitList(&(T->Buf[i]),SizeEl);
}
TableError = TableOk;
}
intEmptyTable(Table *T) {
return T->n == 0;
}
intSearch_List(List *L, BaseType E, func f) {
_Element temp;
BeginPtr(L);
while (!EndList(L)) {
ReadList(L, &temp);
if (f(&temp, E) == 0) {
return 1;
}
MovePtr(L);
}
return 0;
}
intPutTable(Table *T, BaseType E, func f) {
unsigned index = (unsigned)(((((_Element*)E)->key)*C1 + C2)%T->SizeBuf);
if (Search_List(&(T->Buf[index]), E, f)==1) {
return 0;
}
PutList(&(T->Buf[index]), E);
if (ListError) {
TableError = TableNotMem;
return 0;
}
return 1;
}
intGetTable(Table *T, BaseType E, T_Key Key, func f) {
unsigned index = (unsigned)((Key*C1 + C2) % T->SizeBuf);
if (Search_List(&(T->Buf[index]), E, f)==0) {
return 0;
}
GetList(&(T->Buf[index]), E);
return 1;
}
intReadTable(Table *T, BaseType E, T_Key Key, func f) {
unsigned index = (unsigned)((Key*C1 + C2) % T->SizeBuf);
if (Search_List(&(T->Buf[index]), E, f)==0) {
return 0;
}
ReadList(&(T->Buf[index]), E);
return 1;
}
intWriteTable(Table *T, BaseType E, T_Key Key, func f) {
_Element temp;
if (ReadTable(T, &temp, Key, f)) {
GetTable(T, &temp, Key, f);
PutTable(T, E, f);
return 1;
}
else {
return 0;
}
}
voidDoneTable(Table *T)
{ unsignedi;
for ( I = 0; i< T->SizeBuf; i++) {
DoneList(&(T->Buf[i]));
}
free(T->Buf);
free(T);
}