123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include "LeaHeader.h"
- //returns a pointer to the header of the block
- leaHdr * getHeader(const char * ptr) {
- return (leaHdr *) (ptr - HDR_SIZE);
- }
- unsigned int getSize (const char * ptr) {
- return (getHeader(ptr)->size >> 1);
- }
- unsigned int getPrevSize (const char * ptr) {
- unsigned int sz = getHeader(ptr)->prevSize;
- return sz >> 1;
- }
- void setSize (char * ptr, const unsigned int sz) {
- unsigned int size = getSize(ptr);
- size = ((size & 1) | (sz << 1));
- getHeader(ptr)->size = size;
- }
- void setPrevSize (char * ptr, const unsigned int sz) {
- unsigned int prevSize = getHeader(ptr)->prevSize;
- prevSize = (prevSize & 1) | (sz << 1);
- getHeader(ptr)->prevSize = prevSize;
- }
- //returns a pointer (that points) to the next block
- char * getNext (const char * ptr) {
- return (char *)(ptr + HDR_SIZE + getSize(ptr));
- }
- char * getPrev (const char * ptr) {
- return (char *)(ptr - HDR_SIZE - getPrevSize(ptr));
- }
- 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));
- }
|