#include "LeaHeader.h" //returns a pointer to the header of the block leaHdr *getHeader(const void * ptr) { return (leaHdr *) ((char *) ptr - HDR_SIZE); } size_t getSize (void *ptr) { return (getHeader(ptr)->size >> 1); } size_t getPrevSize (void *ptr) { size_t sz = getHeader(ptr)->previous_size; return sz >> 1; } void *getNext(void *ptr) { return (void *)((char *) ptr + HDR_SIZE + getSize(ptr)); } void setSize(void *ptr, size_t sz) { size_t size = getSize(ptr); size = ((size & 1) | (sz << 1)); getHeader(ptr)->size = size; } void setPrevSize (void *ptr, size_t sz) { size_t previous_size = getHeader(ptr)->previous_size; previous_size = (previous_size & 1) | (sz << 1); getHeader(ptr)->previous_size = previous_size; } void markPrevFree (char * ptr) { getHeader(ptr)->previous_size &= (size_t) (~ 1); } void markPrevInUse (void * ptr) { getHeader(ptr)->previous_size |= 1; } size_t isPrevFree (void * ptr) { size_t free = ~(getHeader(ptr)->previous_size & 1); return (free & 1) ; } void markInUse (void * ptr) { markPrevInUse(getNext(ptr)); } void markFree (char * ptr) { markPrevFree(getNext(ptr)); } size_t isFree (char * ptr) { return isPrevFree(getNext(ptr)); } void set_requested_size (void *ptr, size_t size) { getHeader(ptr)->requested_size = size; }