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);
76 void OPENSSL_LH_free(OPENSSL_LHASH *lh)
78 if (lh == NULL)
81 OPENSSL_LH_flush(lh);
82 OPENSSL_free(lh->b);
83 OPENSSL_free(lh);
86 void OPENSSL_LH_flush(OPENSSL_LHASH *lh)
91 if (lh == NULL)
94 for (i = 0; i < lh->num_nodes; i++) {
95 n = lh->b[i];
101 lh->b[i] = NULL;
104 lh->num_items = 0;
107 void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data)
113 lh->error = 0;
114 if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh))
115 return NULL; /* 'lh->error++' already done in 'expand' */
117 rn = getrn(lh, data, &hash);
121 lh->error++;
129 lh->num_items++;
137 void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data)
143 lh->error = 0;
144 rn = getrn(lh, data, &hash);
155 lh->num_items--;
156 if ((lh->num_nodes > MIN_NODES) &&
157 (lh->down_load >= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)))
158 contract(lh);
163 void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data)
168 if (lh->error != 0)
169 lh->error = 0;
171 rn = getrn(lh, data, &hash);
176 static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg,
183 if (lh == NULL)
190 for (i = lh->num_nodes - 1; i >= 0; i--) {
191 a = lh->b[i];
203 void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func)
205 doall_util_fn(lh, 0, func, (OPENSSL_LH_DOALL_FUNCARG)0, NULL);
208 void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)
210 doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);
213 static int expand(OPENSSL_LHASH *lh)
219 nni = lh->num_alloc_nodes;
220 p = lh->p;
221 pmax = lh->pmax;
224 n = OPENSSL_realloc(lh->b, sizeof(OPENSSL_LH_NODE *) * j);
226 lh->error++;
229 lh->b = n;
231 lh->pmax = nni;
232 lh->num_alloc_nodes = j;
233 lh->p = 0;
235 lh->p++;
238 lh->num_nodes++;
239 n1 = &(lh->b[p]);
240 n2 = &(lh->b[p + pmax]);
257 static void contract(OPENSSL_LHASH *lh)
261 np = lh->b[lh->p + lh->pmax - 1];
262 lh->b[lh->p + lh->pmax - 1] = NULL; /* 24/07-92 - eay - weird but :-( */
263 if (lh->p == 0) {
264 n = OPENSSL_realloc(lh->b,
265 (unsigned int)(sizeof(OPENSSL_LH_NODE *) * lh->pmax));
268 lh->error++;
271 lh->num_alloc_nodes /= 2;
272 lh->pmax /= 2;
273 lh->p = lh->pmax - 1;
274 lh->b = n;
276 lh->p--;
278 lh->num_nodes--;
280 n1 = lh->b[(int)lh->p];
282 lh->b[(int)lh->p] = np;
290 static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh,
297 hash = (*(lh->hash)) (data);
300 nn = hash % lh->pmax;
301 if (nn < lh->p)
302 nn = hash % lh->num_alloc_nodes;
304 cf = lh->comp;
305 ret = &(lh->b[(int)nn]);
369 unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh)
371 return lh ? lh->num_items : 0;
374 unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh)
376 return lh->down_load;
379 void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load)
381 lh->down_load = down_load;
384 int OPENSSL_LH_error(OPENSSL_LHASH *lh)
386 return lh->error;