Annotation of 43BSDReno/sys/nfs/TEST/billboard/src/bb_hash.c, revision 1.1

1.1     ! root        1: /*
        !             2:  ******************************************************************************
        !             3:  *
        !             4:  * Module: bb_hash.c
        !             5:  *
        !             6:  * Functions: 
        !             7:  *         bb_put_hash()       - Place an entry in the hash table.
        !             8:  *         bb_get_hash()       - Return an index from the hash table.
        !             9:  *
        !            10:  *
        !            11:  ******************************************************************************
        !            12:  */
        !            13: 
        !            14: /*
        !            15:  ******************************************************************************
        !            16:  * Include Files
        !            17:  ******************************************************************************
        !            18:  */
        !            19: #include <stdio.h>
        !            20: #include <rpc/rpc.h>
        !            21: #include "common.h"
        !            22: #include "protocol.h"
        !            23: #include "server.h"
        !            24: 
        !            25: static BB_hash         bb_hash;        /* The hash table of id, index. */
        !            26: static BB_co_data      bb_co_d[BB_MAX_IMP]; /* The company data table. */
        !            27: 
        !            28: int
        !            29: bb_put_hash( id, index)
        !            30:   BB_id                id;             /* The identifier to hash.              */
        !            31:   int          index;          /* Index of this record in co. data tbl.*/
        !            32: {
        !            33:     int                i;              /* Nice loop variable name.             */
        !            34:     int                hash_idx = 0;   /* Index into hash table.               */
        !            35:     int                term_idx;       /* Termination index of circular search.*/
        !            36: 
        !            37:     /*
        !            38:     **  Sum up all of the characters in the id and mod it by the
        !            39:     **  hash list size.  This is the initial hash index.
        !            40:     */
        !            41:     for( i = 0; (id[i] != NUL) && (i < BB_ID_NAME_LEN); i++)
        !            42:     {
        !            43:        hash_idx += id[i];
        !            44:     }
        !            45:     hash_idx = term_idx = (hash_idx % BB_MAX_HASH);
        !            46: 
        !            47:     /*
        !            48:     **  Search the table for the first open hash bucket.  If the hash
        !            49:     **  table does not contain one break at the termination index.
        !            50:     */
        !            51:     while( bb_hash[hash_idx].id_ptr != NULL )
        !            52:     {
        !            53:        hash_idx = ((hash_idx + 1) % BB_MAX_HASH);
        !            54:        if ( hash_idx == term_idx )
        !            55:            break;
        !            56:     }
        !            57:     
        !            58:     /*
        !            59:     **  If the hash bucket is empty then install the info here.
        !            60:     **  Otherwise the table is full.
        !            61:     */
        !            62:     if ( bb_hash[hash_idx].id_ptr == NULL )
        !            63:     {
        !            64:        bb_hash[hash_idx].index  = index;
        !            65:        bb_hash[hash_idx].id_ptr = id;
        !            66:        return BB_SUCCESS;
        !            67:     }
        !            68:     else
        !            69:     {
        !            70:        return BB_HASH_TABLE_FULL;
        !            71:     }
        !            72: }
        !            73: 
        !            74: int
        !            75: bb_get_hash( id)
        !            76:   BB_id                id;             /* The identifier to hash.              */
        !            77: {
        !            78:     int                i;              /* Nice loop variable name.             */
        !            79:     int                hash_idx = 0;   /* Index into hash table.               */
        !            80:     int                term_idx;       /* Termination index of circular search.*/
        !            81: 
        !            82:     /*
        !            83:     **  Sum up all of the characters in the id and mod it by the
        !            84:     **  hash list size.  This is the initial hash index.
        !            85:     */
        !            86:     for( i = 0; (id[i] != NUL) && (i < BB_ID_NAME_LEN); i++)
        !            87:     {
        !            88:        hash_idx += id[i];
        !            89:     }
        !            90:     hash_idx = term_idx = (hash_idx % BB_MAX_HASH);
        !            91: 
        !            92:     /*
        !            93:     **  Search the hash table based upon the initial index.  The search
        !            94:     **  ends when the index is found or one complete cycle of the hash
        !            95:     **  table has been done.  This is linear resolution.
        !            96:     */
        !            97:     while( ( bb_hash[hash_idx].id_ptr != NULL ) && 
        !            98:           ( strncmp( bb_hash[hash_idx].id_ptr, id, BB_ID_NAME_LEN) != 0 ) )
        !            99:     {
        !           100:        hash_idx = ((hash_idx + 1) % BB_MAX_HASH);
        !           101:        if ( hash_idx == term_idx )
        !           102:            break;
        !           103:     }
        !           104:     
        !           105:     /*
        !           106:     **  If the id is equal to that of the hash bucket then a match is 
        !           107:     **  found.  Otherwise the table does not contain this id.
        !           108:     */
        !           109:     if ( ( bb_hash[hash_idx].id_ptr != NUL ) &&
        !           110:         ( strncmp( bb_hash[hash_idx].id_ptr, id, BB_ID_NAME_LEN) == 0 ) )
        !           111:     {
        !           112:        return bb_hash[hash_idx].index;
        !           113:     }
        !           114:     else
        !           115:     {
        !           116:        return BB_HASH_ID_NOT_FOUND;
        !           117:     }
        !           118: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.