Provided by: manpages-pt-dev_20040726-4_all bug

NOME

       hcreate, hdestroy, hsearch - gerencimento de tabela de 'hash'

SINOPSE

       #include <search.h>

       ENTRY *hsearch(ENTRY item, ACTION action);

       int hcreate(unsigned nel);

       void hdestroy(void);

DESCRI,C~AO

       Essas  tres  funcoes  permitem que o usuario crie uma tabela de hash, a
       qual associa uma chave com quaisquer dados.

       Primeiro, a tabela precisa ser criada com a funcao  hcreate().   nel  e
       uma  uma  esimativa  do  numero  de entradas na tabela.  hcreate() pode
       ajustar esse valor para maior a fim de melhorar o desempenho da  tabela
       de  hash  resultante.  A  imnplementacao  GNU de hsearch() ira, tambem,
       aumnetar a tabela se a mesma ficar  praticamente  cheia.   malloc(3)  e
       utilizado para alocar espaco para a tabela.

       A funcao correspondente hdestroy() libera a memoria ocupada pela tabela
       de hash para que uma nova tabela possa ser construida.

       item e do tipo ENTRY, a qual e um 'typedef' definido  em  <search.h>  e
       inclui estes elementos:

            typedef struct entry
              {
                char *key;
                char *data;
              } ENTRY;

       key aponta para a string ASCII terminada em zero, a qual e uma chave de
       busca.  data  aponta  para  os  dados  associados  aquela  chave.   (um
       apontador  para  um tipo diferente de caracter deve ser substituido por
       um ponteiro-para-caracter ("pointer-to-character").) hserach procura na
       tabela  de  hash  um  item  com  a  mesma  chave  que item e se for bem
       sucedido, retornara um apontador  para  ele.  action  determina  o  que
       hsearch() fara apos uma busca infrutifera. Um valor de FIND o instrui a
       inserir o novo item, enquanto um  valor  de   FIND  significa  retornar
       NULL.

VALOR DE RETURN

       hcreate()  retorna NULL se a tabela de hash nao puder ser instalada com
       sucesso.

       hsearch() retorna NULL se action e ENTER e nao  ha  memoria  suficiente
       para  expandir  a  tabela  hash,  ou action e FIND e item nao puser ser
       encontrado na tabela de hash.

EM CONFORMIDADE COM

       SVID, exceto em SysV, a tabela de hash nao pode crescer.

BUGS

       A  implementacao  so  consegue  gerenciar  uma  tabela  hash  por  vez.
       Entradas  de  tabela  de hash individuais podem ser acrescidas, mas nao
       apagadas.

EXEMPLO

       O seguinte programa insere 24 itens em  uma  tabela  de  hash  e  entao
       imnprime alguns deles.

            #include <stdio.h>
            #include <search.h>

            char *data[]={ "alpha", "bravo", "charlie", "delta",
                 "echo", "foxtrot", "golf", "hotel", "india", "julliete",
                 "kilo", "lima", "mike", "november", "oscar", "papa",
                 "quebec", "romeo", "sierra", "tango", "uniform",
                 "victor, "whiskey", "x-ray", "yankee", "zulu"
             };

            int main()
            {
              ENTRY e, *ep;
              int i;

              /* inicia com uma tabela pequena e permite-lhe crescer */
              hcreate(3);
              for (i = 0; i < 24; i++)
                {
                  e.key = data[i];
                  /* data e apenas um inteiro, ao inves de um ponteiro para algo */
                  e.data = (char *)i;
                  ep = hsearch(e, ENTER);
                  /* nao deve haver falhas */
                  if(ep == NULL) {fprintf(stderr, "entry failed\n"); exit(1);}
                }
              for (i = 22; i < 26; i++)
                /* imprime duas entradas vindas da tabela e mostra
                   as duas que nao estao na tabela */
                {
                  e.key = data[i];
                  ep = hsearch(e, FIND);
                  printf("%9.9s -> %9.9s:%d\n, e.key, ep?ep->key:"NULL",
                      ep?(int)(ep->data):0);
                }
              return0;
            }

VEJA TAMB'EM

       bsearch(3), lsearch(3), tsearch(3), malloc(3)

TRADUZIDO PELO LDP-BR EM 18.8.2000

       Valter 'Geddy' Ferraz Sanches <geddy@lawyer.com> (traducao)
       Revisor <revisor@revisolandia.com> (revisao)

                                                                    HSEARCH(3)