#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 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 &= (~ 1); } void markPrevInUse (char * ptr) { getHeader(ptr)->prevSize |= 1; } unsigned int isPrevFree (char * ptr) { unsigned int free = ~(getHeader(ptr)->prevSize & 1); return (free & 1) ; } void markInUse (char * ptr) { markPrevInUse(getNext(ptr)); } void markFree (char * ptr) { markPrevFree(getNext(ptr)); } unsigned int isFree (char * ptr) { return isPrevFree(getNext(ptr)); }