hash.h

Vá para a documentação deste arquivo.
00001 /*
00002 * Copyright 2007, 2008 Ernesto Coutinho Colla
00003 *
00004 * "BN Parallel Package" é um nome que identifica o conjunto de programas 
00005 * que forma uma biblioteca de rotinas que foram desenvolvidas como parte da 
00006 * dissertação de mestrado do autor em Ciências da Computação.
00007 *
00008 * O conjunto de programas foi integralmente desenvolvido pelo autor e está
00009 * disponível sob a licença GPL (GNU General Public License). O entendimento
00010 * integral dos termos da licença GPL é condição necessária para a utilização
00011 * parcial ou integral de qualquer parte deste conjunto de programas.
00012 *
00013 * This file is part of BN Parallel Package.
00014 * 
00015 * BN Parallel Package is free software: you can redistribute it and/or modify
00016 * it under the terms of the GNU General Public License as published by
00017 * the Free Software Foundation, either version 3 of the License.
00018 *
00019 * BN Parallel Package is distributed in the hope that it will be useful,
00020 * but WITHOUT ANY WARRANTY; without even the implied warranty of
00021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00022 * GNU General Public License for more details.
00023 *
00024 * You should have received a copy of the GNU General Public License
00025 * along with BN Parallel Package. If not, see <http://www.gnu.org/licenses/>.
00026 */
00027 
00028 
00029 /*!
00030  * @file        hash.h
00031  * @author      Ernesto Colla (ernesto@gmail.com)
00032  * @version     0.0.1
00033  * @date        Abril/2007
00034  * @brief       Implementação de uma estrutura para criar hashs que mapeiam strings-números_reais, ou seja, pares chave-valor.
00035  *
00036  * Implementação de uma biblioteca genérica para trabalhar com hashs que mapeiam palavras (strings) a números reais.
00037  */
00038 
00039 #ifndef HASH_H
00040 #define HASH_H
00041 
00042 /* Defines */
00043 
00044 #define HASH_MAX 100 //!< Tamanho máximo da chave do hash
00045 
00046 #define get16bits(d) (*((const uint16_t *) (d))) //!< Macro para fazer cast de valores utilizada na rotina que gera o hash
00047 
00048 /* Definição dos tipos de dados */
00049 
00050 /*! Estrutura de dados utilizada para armazenar o conteúdo do hash */
00051 typedef struct struct_Hash {
00052         int length;                                             //!< Tamanho (número de elementos) do hash.
00053         struct struct_HashNode** nodes; //!< Nó utilizado para armazenar o conteúdo do hash.
00054 } Hash;
00055 
00056 /*! HashNode de uma lista ligada */
00057 typedef struct struct_HashNode {
00058         char* key;                                              //!< Chave que identifica o elemento no hash.
00059         double value;                                   //!< Valor numérico armazenado no elemento do hash.
00060         struct struct_HashNode* next;   //!< Ponteiro para o próximo \e node da lista na estrutura de armazenamento do hash.
00061 } HashNode;
00062 
00063 
00064 /*!
00065  * @brief Função de espalhamento que gera o indicador da posição a partir da chave do hash.
00066  * @param[in] key Chave que identifica o elemento do hash.
00067  * @return Valor correspondente à posição no array de armazenamento de dados.
00068  */
00069 int hashIndex (char* key);
00070 
00071 /*!
00072  * @brief Cria um novo hash vazio.
00073  * @return Ponteiro para um hash criado.
00074  */
00075 
00076 Hash* newHash ();
00077 
00078 /*!
00079  * @brief Destrói um hash e desaloda todo conteúdo alocado.
00080  * @param[out] refHash Referência para o hash a ser destruído.
00081  */
00082 
00083 void destroyHash (Hash** refHash);
00084 
00085 /*!
00086  * @brief Retorna o tamanho, número de elementos ou pares chave-valor, do hash.
00087  * @return Tamanho do hash.
00088  */
00089 
00090 int hlength(Hash* Hash);
00091 
00092 /*!
00093  * @brief Informa se o hash possui uma determinada chave armazenada.
00094  * @param[in] hash Hash a ser consultado.
00095  * @param[in] key Chave que se deseja saber se está armazenada no hash.
00096  * @return '1': se houver um elemento correspondente à chave procurada. '0': caso contrário.
00097  */
00098 
00099 int hcontains (Hash* hash, char* key);
00100 
00101 
00102 /*!
00103  * @brief Retorna do hash o valor armazenado correspondente à chave.
00104  * @param[in] hash Hash a ser consultado.
00105  * @param[in] key Chave do qual se deseja o valor armazenado.
00106  * @return Valor correspondente à chave armazenada no hash ou '\\0' caso o hash não tenha a chave procurada.
00107  */
00108 
00109 double hget (Hash* hash, char* key);
00110 
00111 /*!
00112  * @brief Adiciona um par chave-valor em um hash.
00113  * @param[out] refHash Referência para o hash no qual o par chave-valor será armazenado
00114  * @param[in] key Chave do par chave-valor que será armazenado.
00115  * @param[in] value Valor do par chave-valor que será armazenado.
00116  * @return Número de elementos armazenados no hash.
00117  */
00118 
00119 int hput (Hash** refHash,char* key, double value);
00120 
00121 /*!
00122  * @brief Cria um novo node da lista ligada utilizada para armazenar os dados do hash.
00123  * @return Ponteiro para um novo node da lista ligada.
00124  */
00125 
00126 HashNode* newHashNode ();
00127 
00128 /*!
00129  * @brief Constrói um novo node da lista ligada utilizada para armazenar os dados do hash.
00130  * @param[in] key Chave do par chave-valor que será armazenado.
00131  * @param[in] value Valor do par chave-valor que será armazenado.
00132  * @return Ponteiro para um novo node da lista ligada.
00133  */
00134 
00135 HashNode* buildHashNode (char* key, double value);
00136 
00137 /*!
00138  * @brief Destrói um HashNode e desaloda todo conteúdo alocado.
00139  * @param[out] refNode Referência para o node a ser destruído.
00140  */
00141 
00142 void destroyHashNode(HashNode** refNode);
00143 
00144 /*!
00145  * @brief Dump do conteúdo armazenado no hash
00146  * @param[in] hash Hash do qual será feito o dump.
00147  */
00148 
00149 void dumpHash(Hash* hash);
00150 
00151 #endif

Gerado em Fri Feb 15 19:50:41 2008 para IME-Dissertação por  doxygen 1.5.1