From a3da87ad75d2d1592de288da6eba859195cb5089 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Tue, 19 Apr 2022 23:39:51 +0300 Subject: [PATCH] bitmap 1 --- CMakeLists.txt | 2 ++ array.c | 2 +- bitmap.c | 8 ++++++++ bitmap.h | 9 +++++++++ cutypes.h | 2 ++ test.c | 5 +++++ 6 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 bitmap.c create mode 100644 bitmap.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ad0620..4cdf5ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,12 +6,14 @@ set(HEADERS cutil.h list.h array.h + bitmap.h ) set(SOURCES cutil.c list.c array.c + bitmap.c ) add_library(cutil STATIC ${SOURCES} ${HEADERS}) diff --git a/array.c b/array.c index bf7ed46..400be72 100644 --- a/array.c +++ b/array.c @@ -23,7 +23,7 @@ void array_clear(array_t* array) uint array_align(array_t* array, uint count) { - return (count / array->align + !!(count % array->align)) * array->align; + return cu_align(count, array->align); } void array_resize(array_t* array, uint newCount) diff --git a/bitmap.c b/bitmap.c new file mode 100644 index 0000000..e445617 --- /dev/null +++ b/bitmap.c @@ -0,0 +1,8 @@ +#include "bitmap.h" + +uint bit_log2(uint64_t value) +{ + uint pow2 = 0; + while (value>>=1) pow2++; + return pow2; +} diff --git a/bitmap.h b/bitmap.h new file mode 100644 index 0000000..9782c52 --- /dev/null +++ b/bitmap.h @@ -0,0 +1,9 @@ +#ifndef __BITMAP_H +#define __BITMAP_H + +#include "cutypes.h" + +#define bit_align2(v, p) (((v>>p)+!!(v&((1<
#include "list.h" #include "array.h" +#include "bitmap.h" int main() { @@ -50,5 +51,9 @@ int main() printf("%p\t%d\t%d\t%d\n", array.mem, array.size, array.count, array.align); array_clear(&array); + + printf("[bitmap]\n"); + printf("bit_align2\t%u\n", bit_align2(354, 3)); + printf("bit_log2\t%u\n", bit_log2(34)); return 0; } \ No newline at end of file