1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
crate::ix!();

pub trait Init {

    /**
      | Initialize internal state from the
      | database and block index.
      |
      */
    fn init(&mut self) -> bool;
}

#[inline] pub fn readle16(ptr: *const u8) -> u16 {
    
    todo!();
        /*
            uint16_t x;
        memcpy((char*)&x, ptr, 2);
        return le16toh(x);
        */
}

#[inline] pub fn readle32(ptr: *const u8) -> u32 {
    
    todo!();
        /*
            uint32_t x;
        memcpy((char*)&x, ptr, 4);
        return le32toh(x);
        */
}

#[inline] pub fn readle64(ptr: *const u8) -> u64 {
    
    todo!();
        /*
            uint64_t x;
        memcpy((char*)&x, ptr, 8);
        return le64toh(x);
        */
}

#[inline] pub fn writele16(
        ptr: *mut u8,
        x:   u16)  {
    
    todo!();
        /*
            uint16_t v = htole16(x);
        memcpy(ptr, (char*)&v, 2);
        */
}

#[inline] pub fn writele32(
        ptr: *mut u8,
        x:   u32)  {
    
    todo!();
        /*
            uint32_t v = htole32(x);
        memcpy(ptr, (char*)&v, 4);
        */
}

#[inline] pub fn writele64(
        ptr: *mut u8,
        x:   u64)  {
    
    todo!();
        /*
            uint64_t v = htole64(x);
        memcpy(ptr, (char*)&v, 8);
        */
}

#[inline] pub fn readbe16(ptr: *const u8) -> u16 {
    
    todo!();
        /*
            uint16_t x;
        memcpy((char*)&x, ptr, 2);
        return be16toh(x);
        */
}

#[inline] pub fn readbe32(ptr: *const u8) -> u32 {
    
    todo!();
        /*
            uint32_t x;
        memcpy((char*)&x, ptr, 4);
        return be32toh(x);
        */
}

#[inline] pub fn readbe64(ptr: *const u8) -> u64 {
    
    todo!();
        /*
            uint64_t x;
        memcpy((char*)&x, ptr, 8);
        return be64toh(x);
        */
}

#[inline] pub fn writebe32(
        ptr: *mut u8,
        x:   u32)  {
    
    todo!();
        /*
            uint32_t v = htobe32(x);
        memcpy(ptr, (char*)&v, 4);
        */
}

#[inline] pub fn writebe64(
        ptr: *mut u8,
        x:   u64)  {
    
    todo!();
        /*
            uint64_t v = htobe64(x);
        memcpy(ptr, (char*)&v, 8);
        */
}

/**
  | Return the smallest number n such that
  | (x >> n) == 0 (or 64 if the highest bit in
  | x is set.
  |
  */
#[inline] pub fn count_bits(x: u64) -> u64 {
    
    todo!();
        /*
            #if HAVE_BUILTIN_CLZL
        if (sizeof(unsigned long) >= sizeof(uint64_t)) {
            return x ? 8 * sizeof(unsigned long) - __builtin_clzl(x) : 0;
        }
    #endif
    #if HAVE_BUILTIN_CLZLL
        if (sizeof(unsigned long long) >= sizeof(uint64_t)) {
            return x ? 8 * sizeof(unsigned long long) - __builtin_clzll(x) : 0;
        }
    #endif
        int ret = 0;
        while (x) {
            x >>= 1;
            ++ret;
        }
        return ret;
        */
}