Oi Rogério,
...estou sentindo certa dificuldade em entender como as coisas "mais ou menos genéricas" são construídas em C.
Relaxe.
Não há nada profundo no que eu quis dizer.
O genérico foi dizer que, do ponto de visita da ST, o tipo da chave e o tipo valor não importa.
O cliente deve passar a função de comparação para a ST comparar as chaves.
O mais eu menos foi só para chamar a atenção que a ST só pode clonar/cópiar chaves e valores de algum tipo fazendo:
/* o include abaixo já está no arquivo binarysearchst.c */ #include <string.h> /* memcpy() */ /* alocamos espaço para o clone/copia */ void *clone = emalloc(nObj); /* copiamos nObj bytes a partir da posição apontada por obj para a posição * apontada por clone */ memcpy(clone, obj, nObj);
No código, obj
faz o papel de um ponteiro para uma chave ou valor e nObj
é o seu número de byte.
O código acima só clona obj
se ele ocupar nObj
bytes consecutivos na memória.
Isso server para clonar vetores, inteiros, structs que não tem algum campo que seja um ponteiro.