1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #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));
- }
|