php hashtable nindex,zend_hash_index_find

PHP7ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)

直接在 hash 表中根据h索引找到存储的zval值的指针。ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)

{

Bucket *p;

IS_CONSISTENT(ht);

if (ht->u.flags & HASH_FLAG_PACKED) {

if (h nNumUsed) {

p = ht->arData + h;

if (Z_TYPE(p->val) != IS_UNDEF) {

return &p->val;

}

}

return NULL;

}

p = zend_hash_index_find_bucket(ht, h);

return p ? &p->val : NULL;

}

PHP5ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)

根据h作为索引依据和 hash 表ht的掩码相与得到在ht->arBuckets中的槽位,最后将值传入*pData指针中。ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)

{

uint nIndex;

Bucket *p;

IS_CONSISTENT(ht);

nIndex = h & ht->nTableMask;

p = ht->arBuckets[nIndex];

while (p != NULL) {

if ((p->h == h) && (p->nKeyLength == 0)) {

*pData = p->pData;

return SUCCESS;

}

p = p->pNext;

}

return FAILURE;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值