I have a huge set of code that I have to translate from C to C++. But this function, I cannot make any sense. Please help in explaining.
This is the content of the struct.Code:void myfree(void *ap)
{
Header *bp, *p;
bp = (Header *)ap - 1; /* point to block header */
printf("bp->s.size %d\n",bp->s.size);
for (p = freeptr; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
if (p >= p->s.ptr && (bp > p || bp < p->s.ptr))
{
printf("in the corner\n");
break; /* freed block at start or end of arena */
}
bp->s.check =1;
if (bp + bp->s.size == p->s.ptr)
{
/* join to upper nbr */
bp->s.size += p->s.ptr->s.size;
bp->s.ptr = p->s.ptr->s.ptr;
}
else
bp->s.ptr = p->s.ptr;
if (p + p->s.size == bp)
{ /* join to lower nbr */
p->s.size += bp->s.size;
p->s.ptr = bp->s.ptr;
}
else
p->s.ptr = bp;
freeptr = p;
}
Code:union header{ /* block header */
struct{
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
int check;
} s;
Align x; /* force alignment of blocks */
};
typedef union header Header;