12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #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)->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 (char * ptr) {
- getHeader(ptr)->previous_size |= 1;
- }
- size_t isPrevFree (char * ptr) {
- size_t free = ~(getHeader(ptr)->previous_size & 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));
- }
- void set_requested_size (void *ptr, size_t size) {
- getHeader(ptr)->requested_size = size;
- }
|