Lines Matching refs:lh

43 static int expand(OPENSSL_LHASH *lh);
44 static void contract(OPENSSL_LHASH *lh);
45 static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, const void *data, unsigned long *rhash);
47 OPENSSL_LHASH *OPENSSL_LH_set_thunks(OPENSSL_LHASH *lh, in OPENSSL_LH_set_thunks() argument
54 if (lh == NULL) in OPENSSL_LH_set_thunks()
56 lh->compw = cw; in OPENSSL_LH_set_thunks()
57 lh->hashw = hw; in OPENSSL_LH_set_thunks()
58 lh->daw = daw; in OPENSSL_LH_set_thunks()
59 lh->daaw = daaw; in OPENSSL_LH_set_thunks()
60 return lh; in OPENSSL_LH_set_thunks()
86 void OPENSSL_LH_free(OPENSSL_LHASH *lh) in OPENSSL_LH_free() argument
88 if (lh == NULL) in OPENSSL_LH_free()
91 OPENSSL_LH_flush(lh); in OPENSSL_LH_free()
92 OPENSSL_free(lh->b); in OPENSSL_LH_free()
93 OPENSSL_free(lh); in OPENSSL_LH_free()
96 void OPENSSL_LH_flush(OPENSSL_LHASH *lh) in OPENSSL_LH_flush() argument
101 if (lh == NULL) in OPENSSL_LH_flush()
104 for (i = 0; i < lh->num_nodes; i++) { in OPENSSL_LH_flush()
105 n = lh->b[i]; in OPENSSL_LH_flush()
111 lh->b[i] = NULL; in OPENSSL_LH_flush()
114 lh->num_items = 0; in OPENSSL_LH_flush()
117 void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data) in OPENSSL_LH_insert() argument
123 lh->error = 0; in OPENSSL_LH_insert()
124 if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh)) in OPENSSL_LH_insert()
127 rn = getrn(lh, data, &hash); in OPENSSL_LH_insert()
131 lh->error++; in OPENSSL_LH_insert()
139 lh->num_items++; in OPENSSL_LH_insert()
147 void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data) in OPENSSL_LH_delete() argument
153 lh->error = 0; in OPENSSL_LH_delete()
154 rn = getrn(lh, data, &hash); in OPENSSL_LH_delete()
165 lh->num_items--; in OPENSSL_LH_delete()
166 if ((lh->num_nodes > MIN_NODES) && in OPENSSL_LH_delete()
167 (lh->down_load >= (lh->num_items * LH_LOAD_MULT / lh->num_nodes))) in OPENSSL_LH_delete()
168 contract(lh); in OPENSSL_LH_delete()
173 void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data) in OPENSSL_LH_retrieve() argument
178 if (lh->error != 0) in OPENSSL_LH_retrieve()
179 lh->error = 0; in OPENSSL_LH_retrieve()
181 rn = getrn(lh, data, &hash); in OPENSSL_LH_retrieve()
186 static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg, in doall_util_fn() argument
196 if (lh == NULL) in doall_util_fn()
203 for (i = lh->num_nodes - 1; i >= 0; i--) { in doall_util_fn()
204 a = lh->b[i]; in doall_util_fn()
216 void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func) in OPENSSL_LH_doall() argument
218 if (lh == NULL) in OPENSSL_LH_doall()
221 doall_util_fn(lh, 0, lh->daw, func, (OPENSSL_LH_DOALL_FUNCARG)NULL, in OPENSSL_LH_doall()
225 void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, in OPENSSL_LH_doall_arg() argument
228 if (lh == NULL) in OPENSSL_LH_doall_arg()
231 doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC_THUNK)NULL, in OPENSSL_LH_doall_arg()
232 (OPENSSL_LH_DOALL_FUNC)NULL, func, lh->daaw, arg); in OPENSSL_LH_doall_arg()
235 void OPENSSL_LH_doall_arg_thunk(OPENSSL_LHASH *lh, in OPENSSL_LH_doall_arg_thunk() argument
239 doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC_THUNK)NULL, in OPENSSL_LH_doall_arg_thunk()
243 static int expand(OPENSSL_LHASH *lh) in expand() argument
249 nni = lh->num_alloc_nodes; in expand()
250 p = lh->p; in expand()
251 pmax = lh->pmax; in expand()
254 n = OPENSSL_realloc(lh->b, sizeof(OPENSSL_LH_NODE *) * j); in expand()
256 lh->error++; in expand()
259 lh->b = n; in expand()
261 lh->pmax = nni; in expand()
262 lh->num_alloc_nodes = j; in expand()
263 lh->p = 0; in expand()
265 lh->p++; in expand()
268 lh->num_nodes++; in expand()
269 n1 = &(lh->b[p]); in expand()
270 n2 = &(lh->b[p + pmax]); in expand()
287 static void contract(OPENSSL_LHASH *lh) in contract() argument
291 np = lh->b[lh->p + lh->pmax - 1]; in contract()
292 lh->b[lh->p + lh->pmax - 1] = NULL; /* 24/07-92 - eay - weird but :-( */ in contract()
293 if (lh->p == 0) { in contract()
294 n = OPENSSL_realloc(lh->b, in contract()
295 (unsigned int)(sizeof(OPENSSL_LH_NODE *) * lh->pmax)); in contract()
298 lh->error++; in contract()
300 lh->b = n; in contract()
302 lh->num_alloc_nodes /= 2; in contract()
303 lh->pmax /= 2; in contract()
304 lh->p = lh->pmax - 1; in contract()
306 lh->p--; in contract()
308 lh->num_nodes--; in contract()
310 n1 = lh->b[(int)lh->p]; in contract()
312 lh->b[(int)lh->p] = np; in contract()
320 static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, in getrn() argument
326 if (lh->hashw != NULL) in getrn()
327 hash = lh->hashw(data, lh->hash); in getrn()
329 hash = lh->hash(data); in getrn()
333 nn = hash % lh->pmax; in getrn()
334 if (nn < lh->p) in getrn()
335 nn = hash % lh->num_alloc_nodes; in getrn()
337 ret = &(lh->b[(int)nn]); in getrn()
344 if (lh->compw != NULL) { in getrn()
345 if (lh->compw(n1->data, data, lh->comp) == 0) in getrn()
348 if (lh->comp(n1->data, data) == 0) in getrn()
426 unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh) in OPENSSL_LH_num_items() argument
428 return lh ? lh->num_items : 0; in OPENSSL_LH_num_items()
431 unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh) in OPENSSL_LH_get_down_load() argument
433 return lh->down_load; in OPENSSL_LH_get_down_load()
436 void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load) in OPENSSL_LH_set_down_load() argument
438 lh->down_load = down_load; in OPENSSL_LH_set_down_load()
441 int OPENSSL_LH_error(OPENSSL_LHASH *lh) in OPENSSL_LH_error() argument
443 return lh->error; in OPENSSL_LH_error()