abc

C++语言:
static int dictExpand( dict * ht , unsigned long size) {
    dict n; /* the new hashtable */
    unsigned long realsize = _dictNextPower( size ), i;

    /* the size is invalid if it is smaller than the number of
     * elements already inside the hashtable */

    if ( ht -> used > size)
        return DICT_ERR;

    _dictInit( &n , ht -> type , ht -> privdata);
    n . size = realsize;
    n . sizemask = realsize - 1;
    n . table = calloc( realsize , sizeof( dictEntry *));

    /* Copy all the elements from the old to the new table:
     * note that if the old hash table is empty ht->size is zero,
     * so dictExpand just creates an hash table. */

    n . used = ht -> used;
    for ( i = 0; i < ht -> size && ht -> used > 0; i ++) {
        dictEntry * he , * nextHe;

        if ( ht -> table [ i ] == NULL) continue;

        /* For each hash entry on this slot... */
        he = ht -> table [ i ];
        while( he) {
            unsigned int h;

            nextHe = he -> next;
            /* Get the new element index */
            h = dictHashKey( ht , he -> key) & n . sizemask;
            he -> next = n . table [ h ];
            n . table [ h ] = he;
            ht -> used --;
            /* Pass to the next element */
            he = nextHe;
        }
    }
    assert( ht -> used == 0);
    free( ht -> table);

    /* Remap the new hashtable in the old */
    * ht = n;
    return DICT_OK;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值