Remove RzBitmap in favor of RzBitvector (#3433)
This commit is contained in:
parent
4c7408a15a
commit
0e1bbd28f8
8 changed files with 6 additions and 169 deletions
|
|
@ -274,14 +274,14 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) {
|
|||
}
|
||||
ut64 paddr_base = obj->bmp_header->FirstPage;
|
||||
ut64 num_pages = obj->bmp_header->Pages;
|
||||
RzBitmap *bitmap = rz_bitmap_new(num_pages);
|
||||
rz_bitmap_set_bytes(bitmap, obj->bitmap, num_pages / 8);
|
||||
RzBitVector *bitmap = rz_bv_new(num_pages);
|
||||
rz_bv_set_from_bytes_le(bitmap, obj->bitmap, 0, num_pages);
|
||||
|
||||
ut64 num_bitset = 0;
|
||||
bool create_new_page = true;
|
||||
dmp_page_desc *page;
|
||||
for (ut64 i = 0; i < num_pages; i++) {
|
||||
if (!rz_bitmap_test(bitmap, i)) {
|
||||
if (!rz_bv_get(bitmap, i)) {
|
||||
create_new_page = true;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -292,7 +292,7 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) {
|
|||
}
|
||||
page = RZ_NEW0(dmp_page_desc);
|
||||
if (!page) {
|
||||
rz_bitmap_free(bitmap);
|
||||
rz_bv_free(bitmap);
|
||||
return false;
|
||||
}
|
||||
if (UT64_MUL_OVFCHK(i, DMP_PAGE_SIZE)) {
|
||||
|
|
@ -310,11 +310,11 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) {
|
|||
RZ_LOG_ERROR("The total present pages number (%" PFMT64u ") in the header "
|
||||
"does not match with the counted one (%" PFMT64u ").\n",
|
||||
obj->bmp_header->TotalPresentPages, num_bitset);
|
||||
rz_bitmap_free(bitmap);
|
||||
rz_bv_free(bitmap);
|
||||
return false;
|
||||
}
|
||||
|
||||
rz_bitmap_free(bitmap);
|
||||
rz_bv_free(bitmap);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ rz_util_files = [
|
|||
'rz_util/rz_base64.h',
|
||||
'rz_util/rz_base91.h',
|
||||
'rz_util/rz_big.h',
|
||||
'rz_util/rz_bitmap.h',
|
||||
'rz_util/rz_bitvector.h',
|
||||
'rz_util/rz_buf.h',
|
||||
'rz_util/rz_debruijn.h',
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
#include "rz_util/rz_base64.h"
|
||||
#include "rz_util/rz_base91.h"
|
||||
#include "rz_util/rz_buf.h"
|
||||
#include "rz_util/rz_bitmap.h"
|
||||
#include "rz_util/rz_bitvector.h"
|
||||
#include "rz_util/rz_time.h"
|
||||
#include "rz_util/rz_debruijn.h"
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
#ifndef RZ_BITMAP_H
|
||||
#define RZ_BITMAP_H
|
||||
|
||||
#include <rz_types.h>
|
||||
|
||||
#if RZ_SYS_BITS == 4
|
||||
#define BITWORD_BITS_SHIFT 5
|
||||
#define RzBitword ut32
|
||||
#else
|
||||
#define BITWORD_BITS_SHIFT 6
|
||||
#define RzBitword ut64
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct rz_bitmap_t {
|
||||
size_t length;
|
||||
RzBitword *bitmap;
|
||||
} RzBitmap;
|
||||
|
||||
RZ_API RZ_OWN RzBitmap *rz_bitmap_new(size_t len);
|
||||
RZ_API void rz_bitmap_set_bytes(RZ_NONNULL RzBitmap *b, RZ_NONNULL const ut8 *buf, size_t len);
|
||||
RZ_API void rz_bitmap_free(RZ_NULLABLE RzBitmap *b);
|
||||
RZ_API void rz_bitmap_set(RZ_NONNULL RzBitmap *b, size_t bit);
|
||||
RZ_API void rz_bitmap_unset(RZ_NONNULL RzBitmap *b, size_t bit);
|
||||
RZ_API int rz_bitmap_test(RZ_NONNULL RzBitmap *b, size_t bit);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // RZ_BITMAP_H
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2017-2020 pancake <pancake@nopcode.org>
|
||||
// SPDX-FileCopyrightText: 2017-2020 crowell <crowell@bu.edu>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
#include <rz_util.h>
|
||||
|
||||
#define BITMAP_TEST 0
|
||||
|
||||
#if RZ_SYS_BITS == 4
|
||||
#define bitword_read rz_read_le32
|
||||
#define bitword_write rz_write_le32
|
||||
#else
|
||||
#define bitword_read rz_read_le64
|
||||
#define bitword_write rz_write_le64
|
||||
#endif
|
||||
|
||||
#define BITWORD_BITS (sizeof(RzBitword) * 8)
|
||||
#define BITWORD_BITS_MASK (BITWORD_BITS - 1)
|
||||
#define BITWORD_MULT(bit) (((bit) + (BITWORD_BITS_MASK)) & ~(BITWORD_BITS_MASK))
|
||||
#define BITWORD_TEST(x, y) (((x) >> (y)) & 1)
|
||||
|
||||
#define BITMAP_WORD_COUNT(bit) (BITWORD_MULT(bit) >> BITWORD_BITS_SHIFT)
|
||||
|
||||
RZ_API RZ_OWN RzBitmap *rz_bitmap_new(size_t len) {
|
||||
if (len < 1) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RzBitmap *b = RZ_NEW0(RzBitmap);
|
||||
if (!b) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
b->bitmap = calloc(BITMAP_WORD_COUNT(len), sizeof(RzBitword));
|
||||
if (!b->bitmap) {
|
||||
free(b);
|
||||
return NULL;
|
||||
}
|
||||
b->length = len;
|
||||
return b;
|
||||
}
|
||||
|
||||
RZ_API void rz_bitmap_set_bytes(RZ_NONNULL RzBitmap *b, RZ_NONNULL const ut8 *buf, size_t len) {
|
||||
rz_return_if_fail(b && buf);
|
||||
size_t blen = b->length << BITWORD_BITS_SHIFT;
|
||||
if (blen < len) {
|
||||
len = blen;
|
||||
}
|
||||
|
||||
memcpy(b->bitmap, buf, len);
|
||||
}
|
||||
|
||||
RZ_API void rz_bitmap_free(RZ_NULLABLE RzBitmap *b) {
|
||||
if (!b) {
|
||||
return;
|
||||
}
|
||||
free(b->bitmap);
|
||||
free(b);
|
||||
}
|
||||
|
||||
RZ_API void rz_bitmap_set(RZ_NONNULL RzBitmap *b, size_t bit) {
|
||||
rz_return_if_fail(b);
|
||||
if (bit < b->length) {
|
||||
const size_t pos = bit >> BITWORD_BITS_SHIFT;
|
||||
RzBitword value = bitword_read(&b->bitmap[pos]);
|
||||
value |= ((RzBitword)1 << (bit & BITWORD_BITS_MASK));
|
||||
bitword_write(&b->bitmap[pos], value);
|
||||
}
|
||||
}
|
||||
|
||||
RZ_API void rz_bitmap_unset(RZ_NONNULL RzBitmap *b, size_t bit) {
|
||||
rz_return_if_fail(b);
|
||||
if (bit < b->length) {
|
||||
const size_t pos = bit >> BITWORD_BITS_SHIFT;
|
||||
RzBitword value = bitword_read(&b->bitmap[pos]);
|
||||
value &= ~((RzBitword)1 << (bit & BITWORD_BITS_MASK));
|
||||
bitword_write(&b->bitmap[pos], value);
|
||||
}
|
||||
}
|
||||
|
||||
RZ_API int rz_bitmap_test(RZ_NONNULL RzBitmap *b, size_t bit) {
|
||||
rz_return_val_if_fail(b && bit >= 0, -1);
|
||||
if (bit < b->length) {
|
||||
const size_t pos = bit >> BITWORD_BITS_SHIFT;
|
||||
RzBitword bword = bitword_read(&b->bitmap[pos]);
|
||||
return BITWORD_TEST(bword, (bit & BITWORD_BITS_MASK));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -10,7 +10,6 @@ rz_util_common_sources = [
|
|||
'axml.c',
|
||||
'base85.c',
|
||||
'base91.c',
|
||||
'bitmap.c',
|
||||
'bitvector.c',
|
||||
'buf.c',
|
||||
'calc.c',
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ if get_option('enable_tests')
|
|||
'big',
|
||||
'bin_lines',
|
||||
'bin_mach0',
|
||||
'bitmap',
|
||||
'bitvector',
|
||||
'buf',
|
||||
'cmd',
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2016 Jeffrey Crowell <crowell@bu.edu>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
#include <rz_util.h>
|
||||
#include "minunit.h"
|
||||
|
||||
bool test_rz_bitmap_set(void) {
|
||||
int i;
|
||||
static const int max_value = (2343 + 1);
|
||||
static const ut32 values[] = { 1, 2, 3, 4, 8, 34, 543, 2343 };
|
||||
static const int len = (sizeof(values) / sizeof(ut32));
|
||||
RzBitmap *bitmap = rz_bitmap_new(max_value);
|
||||
for (i = 0; i < len; i++) {
|
||||
rz_bitmap_set(bitmap, values[i]);
|
||||
}
|
||||
for (i = 0; i < len; i++) {
|
||||
mu_assert_eq(rz_bitmap_test(bitmap, values[i]), true,
|
||||
"Bit should be set.");
|
||||
}
|
||||
for (i = 0; i < len; i++) {
|
||||
rz_bitmap_unset(bitmap, values[i]);
|
||||
}
|
||||
for (i = 0; i < len; i++) {
|
||||
mu_assert_eq(rz_bitmap_test(bitmap, values[i]), false,
|
||||
"Bit should not be set.");
|
||||
}
|
||||
rz_bitmap_free(bitmap);
|
||||
mu_end;
|
||||
}
|
||||
|
||||
int all_tests() {
|
||||
mu_run_test(test_rz_bitmap_set);
|
||||
return tests_passed != tests_run;
|
||||
}
|
||||
|
||||
mu_main(all_tests)
|
||||
Loading…
Reference in a new issue