apr HashTable原始碼閱讀筆記

2021-07-24 20:05:09 字數 1222 閱讀 5556

原始碼裡預設使用time33演算法,在建立時可自定義演算法。

陣列中每個元素都是乙個指標,指向乙個條目鍊錶。以hash值和max與運算結果作為索引。當條目數量大於max時會對陣列擴充套件,裝填因子最大為1。

struct apr_hash_t ;
struct apr_hash_entry_t ;
struct apr_hash_index_t ;
查詢乙個條目的實現

static apr_hash_entry_t **find_entry(apr_hash_t *ht,

const

void *key,

apr_ssize_t klen,

const

void *val)

//he!=null時找到滿足的條目,val==null時表示查詢。

if (he || !val)

return hep;

//新增val!=null && he==null的條目。

//先從free中獲取例項,沒有就從pool中申請記憶體。

if ((he = ht->free) != null)

ht->free = he->next;

else

he = apr_palloc(ht->pool, sizeof(*he));

he->next = null;

he->hash = hash;

he->key = key;

he->klen = klen;

he->val = val;

*hep = he;

ht->count++;

return hep;

}

apr_declare(void *) apr_hash_get(apr_hash_t *ht,

const

void *key,

apr_ssize_t klen)

apr_declare(void) apr_hash_set(apr_hash_t *ht,

const

void *key,

apr_ssize_t klen,

const

void *val)

else }}

}

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...