/* ============================================================
 * Copyright (c) 2014 Actifio Inc. All Rights Reserved
 */

#ifndef _BITMAP_H_
#define _BITMAP_H_

#include "fc_bitmap.h"

#define LBAS_SIZE   512

typedef struct ram_bitmap {
        fc_bitmap_hdr_t     bmhdr;
        fc_bitmap_mq_hdr_t  mqhdr;
        unsigned char       bits[1];
} ram_bitmap_t;


extern ram_bitmap_t *bitmap_create(uint64_t volsize, unsigned int grainsize);
extern ram_bitmap_t *bitmap_dup(ram_bitmap_t *bitmap);
extern ram_bitmap_t *bitmap_read(const char * bitmap);
extern void bitmap_destroy(ram_bitmap_t *bitmap);
extern void bitmap_addbit(ram_bitmap_t *diff_bitmap, uint64_t rangeaddr, uint64_t rangesize);
extern void bitmap_write(ram_bitmap_t *diff_bitmap, const char * bitmap);
extern int bitmap_add(ram_bitmap_t *result, ram_bitmap_t *lhs, ram_bitmap_t *rhs);
extern int bitmap_subtract(ram_bitmap_t *result, ram_bitmap_t *lhs, ram_bitmap_t *rhs);
extern int bitmap_compare(ram_bitmap_t *, ram_bitmap_t *);
extern uint64_t bitmap_get_bitcount(ram_bitmap_t *);
extern int bitmap_get_bit(ram_bitmap_t *, uint64_t byte_offset);
extern char *bitmap_show_bits(char *string, const char bits);
extern void bitmap_show(ram_bitmap_t *bitmap, uint64_t byte_offset);
extern void holemap_write(ram_bitmap_t *diff_bitmap, const char * bitmap);

typedef struct {
    ram_bitmap_t *diff_bitmap;
    ram_bitmap_t *free_bitmap;
} ram_bitmap_pair_t;

extern ram_bitmap_pair_t *bitmap_pair_create(uint64_t, unsigned int);
extern void bitmap_pair_destroy(ram_bitmap_pair_t *);

#endif
