|
@@ -28,8 +28,14 @@
|
|
|
#include "bitmap/bitmap_rb.h"
|
|
|
#endif /* BITMAP_RB_ONLY */
|
|
|
|
|
|
-raw_block_header_t *create_new_raw_block(size_t raw_block_size) {
|
|
|
+raw_block_header_t *create_new_raw_block(size_t raw_block_size, rb_type type) {
|
|
|
void *ptr;
|
|
|
+#ifdef FL_RB_ONLY
|
|
|
+ freelist_rb_t *fl_rb;
|
|
|
+#endif /* FL_RB_ONLY */
|
|
|
+#ifdef BITMAP_RB_ONLY
|
|
|
+ bitmap_rb_t *bitmap_rb;
|
|
|
+#endif /* BITMAP_RB_ONLY */
|
|
|
|
|
|
ptr = request_memory(raw_block_size);
|
|
|
|
|
@@ -40,24 +46,34 @@ raw_block_header_t *create_new_raw_block(size_t raw_block_size) {
|
|
|
((raw_block_header_t *)ptr)->size = raw_block_size;
|
|
|
((raw_block_header_t *)ptr)->next_raw_block = NULL;
|
|
|
|
|
|
+ switch(type) {
|
|
|
+
|
|
|
#ifdef FL_RB_ONLY
|
|
|
- freelist_rb_t *fl_rb;
|
|
|
- fl_rb = (freelist_rb_t *)((char *)ptr + sizeof(raw_block_header_t));
|
|
|
- fl_rb->border_ptr = (block_header_t *)((char *)fl_rb + sizeof(freelist_rb_t));
|
|
|
- fl_rb->free_list_head = NULL;
|
|
|
+ case FREELIST:
|
|
|
+ fl_rb = (freelist_rb_t *)((char *)ptr +
|
|
|
+ sizeof(raw_block_header_t));
|
|
|
+ fl_rb->border_ptr = (block_header_t *)((char *)fl_rb +
|
|
|
+ sizeof(freelist_rb_t));
|
|
|
+ fl_rb->free_list_head = NULL;
|
|
|
+ break;
|
|
|
#endif /* FL_RB_ONLY */
|
|
|
|
|
|
#ifdef BITMAP_RB_ONLY
|
|
|
- bitmap_rb_t *bitmap_rb;
|
|
|
- bitmap_rb = (bitmap_rb_t *)((char *)ptr + sizeof(raw_block_header_t));
|
|
|
- bitmap_rb->bytes_per_cell = (raw_block_size - sizeof(raw_block_header_t) -
|
|
|
- sizeof(bitmap_rb_t)) / (BMAP_INDEX_NUM * BMAP_EL_SIZE_BITS);
|
|
|
- for(int i = 0; i < BMAP_INDEX_NUM; i++) {
|
|
|
- // initialize for 32 bit bmap elements,
|
|
|
- // should be 0xFFFFFFFFFFFFFFFF for 64 bit bmap elements
|
|
|
- bitmap_rb->bmap_array[i] = 0xFFFFFFFF;
|
|
|
- }
|
|
|
+ case BITMAP:
|
|
|
+ bitmap_rb = (bitmap_rb_t *)((char *)ptr +
|
|
|
+ sizeof(raw_block_header_t));
|
|
|
+ bitmap_rb->bytes_per_cell = (raw_block_size -
|
|
|
+ sizeof(raw_block_header_t) - sizeof(bitmap_rb_t)) /
|
|
|
+ (BMAP_INDEX_NUM * BMAP_EL_SIZE_BITS);
|
|
|
+ for(int i = 0; i < BMAP_INDEX_NUM; i++) {
|
|
|
+ bitmap_rb->bmap_array[i] = 0xFFFFFFFFFFFFFFFF;
|
|
|
+ // This is due to the data type of the element (64-bit)
|
|
|
+ }
|
|
|
+ break;
|
|
|
#endif /* BITMAP_RB_ONLY */
|
|
|
+ case BIGBLOCK:
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
#ifdef HAVE_LOCKS
|
|
|
pthread_mutex_init(&((raw_block_header_t *)ptr)->mutex, NULL);
|