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