Rizin
unix-like reverse engineering framework and cli tools
ht_pp.c
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2016-2018 crowell
2 // SPDX-FileCopyrightText: 2016-2018 pancake <pancake@nopcode.org>
3 // SPDX-FileCopyrightText: 2016-2018 ret2libc <sirmy15@gmail.com>
4 // SPDX-License-Identifier: BSD-3-Clause
5 
6 #include "sdb.h"
7 #include "ht_pp.h"
8 #include "ht_inc.c"
9 
10 static HtName_(Ht) * internal_ht_default_new(ut32 size, ut32 prime_idx, HT_(DupValue) valdup, HT_(KvFreeFunc) pair_free, HT_(CalcSizeV) calcsizeV) {
11  HT_(Options)
12  opt = {
13  .cmp = (HT_(ListComparator))strcmp,
14  .hashfn = (HT_(HashFunction))sdb_hash,
15  .dupkey = (HT_(DupKey))strdup,
16  .dupvalue = valdup,
17  .calcsizeK = (HT_(CalcSizeK))strlen,
18  .calcsizeV = calcsizeV,
19  .freefn = pair_free,
20  .elem_size = sizeof(HT_(Kv)),
21  };
22  return internal_ht_new(size, prime_idx, &opt);
23 }
24 
25 // creates a default HtPP that has strings as keys
26 RZ_API HtName_(Ht) * Ht_(new)(HT_(DupValue) valdup, HT_(KvFreeFunc) pair_free, HT_(CalcSizeV) calcsizeV) {
27  return internal_ht_default_new(ht_primes_sizes[0], 0, valdup, pair_free, calcsizeV);
28 }
29 
30 static void free_kv_key(HT_(Kv) * kv) {
31  free(kv->key);
32 }
33 
34 // creates a default HtPP that has strings as keys but does not dup, nor free the values
35 RZ_API HtName_(Ht) * Ht_(new0)(void) {
36  return Ht_(new)(NULL, free_kv_key, NULL);
37 }
38 
39 RZ_API HtName_(Ht) * Ht_(new_size)(ut32 initial_size, HT_(DupValue) valdup, HT_(KvFreeFunc) pair_free, HT_(CalcSizeV) calcsizeV) {
40  ut32 i = 0;
41 
42  while (i < S_ARRAY_SIZE(ht_primes_sizes) &&
43  ht_primes_sizes[i] * LOAD_FACTOR < initial_size) {
44  i++;
45  }
46  if (i == S_ARRAY_SIZE(ht_primes_sizes)) {
47  i = UT32_MAX;
48  }
49 
50  ut32 sz = compute_size(i, (ut32)(initial_size * (2 - LOAD_FACTOR)));
51  return internal_ht_default_new(sz, i, valdup, pair_free, calcsizeV);
52 }
lzma_index ** i
Definition: index.h:629
#define RZ_API
#define NULL
Definition: cris-opc.c:27
uint32_t ut32
RZ_API void Ht_() free(HtName_(Ht) *ht)
Definition: ht_inc.c:130
static KEY_TYPE dupkey(HtName_(Ht) *ht, const KEY_TYPE k)
Definition: ht_inc.c:30
static const ut32 ht_primes_sizes[]
Definition: ht_inc.c:10
static ut32 compute_size(ut32 idx, ut32 sz)
Definition: ht_inc.c:59
#define LOAD_FACTOR
Definition: ht_inc.c:6
static void freefn(HtName_(Ht) *ht, HT_(Kv) *kv)
Definition: ht_inc.c:46
static ut32 hashfn(HtName_(Ht) *ht, const KEY_TYPE k)
Definition: ht_inc.c:22
#define S_ARRAY_SIZE(x)
Definition: ht_inc.c:7
#define HT_(name)
Definition: ht_inc.h:45
#define Ht_(name)
Definition: ht_inc.h:44
static HtName_(Ht)
Definition: ht_pp.c:10
static void free_kv_key(HT_(Kv) *kv)
Definition: ht_pp.c:30
voidpf void uLong size
Definition: ioapi.h:138
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
#define UT32_MAX
Definition: rz_types_base.h:99
RZ_API ut32 sdb_hash(const char *key)
Definition: util.c:22