numhash.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * numhash.h - (telephone) number storing/hashing system
  3.  *
  4.  * Kalle Marjola 2000 for project Kannel
  5.  *
  6.  * !!! NOTE NOTE NOTE !!!
  7.  *
  8.  * Phone number precision is limited according to sizeof(long)
  9.  * in host machine. that is usually either 32 or 64 bits. In a
  10.  * case of 32 bit longs, only last 9 digits are checked, otherwise
  11.  * last 18 digits. This means that in some places several numbers
  12.  * might map to same hash entry, and thus some caution is needed
  13.  * especially with telephone number black lists
  14.  *
  15.  * USAGE:
  16.  *  the system is not very dynamic; if you want to resize the table
  17.  *  or hash, you must first nuke all old data and then recreate it
  18.  *
  19.  * MEMORY NEEDED:  (approximated)
  20.  *
  21.  * 2* (sizeof(long)+sizeof(void *)) bytes per number
  22.  */
  23. #ifndef NUMHASH_H
  24. #define NUMHASH_H
  25. #include <stdio.h>
  26. /* number hashing/seeking functions
  27.  * all return -1 on error and write to general Kannel log
  28.  *
  29.  * these 2 first are only required if you want to add the numbers
  30.  * by hand - otherwise use the last function instead
  31.  *
  32.  * use prime_hash if you want an automatically generated hash size
  33.  */
  34. typedef struct numhash_table Numhash;
  35. /* get numbers from 'url' and create a new database out of them
  36.  * Return NULL if cannot open database or other error, error is logged
  37.  *
  38.  * Numbers to datafile are saved as follows:
  39.  *  - one number per line
  40.  *  - number might have white spaces, '+' and '-' signs
  41.  *  - number is ended with ':' or end-of-line
  42.  *  - there can be additional comment after ':'
  43.  *
  44.  * For example, all following ones are valid lines:
  45.  *  040 1234
  46.  *  +358 40 1234
  47.  *  +358 40-1234 : Kalle Marjola
  48.  */
  49. Numhash *numhash_create(char *url); 
  50. /* destroy hash and all numbers in it */
  51. void numhash_destroy(Numhash *table);
  52. /* check if the number is in database, return 1 if found, 0 if not,
  53.  * -1 on error */
  54. int numhash_find_number(Numhash *table, Octstr *nro);
  55.       
  56. /* if we already have the key */
  57. int numhash_find_key(Numhash *table, long key);
  58. /* if we want to know the key */
  59. long numhash_get_key(Octstr *nro);
  60. long numhash_get_char_key(char *nro);
  61. /* Return hash fill percent. If 'longest' != NULL, set as longest
  62.  * trail in hash */
  63. double numhash_hash_fill(Numhash *table, int *longest);
  64. /* return number of numbers in hash */
  65. int numhash_size(Numhash *table);
  66. #endif