Example #1
0
File: mm.c Project: dukelv/csci033
static void *coalesce(void *bp) 
{
    bool prev_alloc = GET_ALLOC(FTRP(PREV_BLKP(bp)));
    bool next_alloc = GET_ALLOC(HDRP(NEXT_BLKP(bp)));
    size_t size = GET_SIZE(HDRP(bp));
    if (prev_alloc && next_alloc)
    {
	LLadd(bp);/* Case 1 */
	return (bp);
    }
    else if (prev_alloc && !next_alloc) 
    {         /* Case 2 */
	LLrem(NEXT_BLKP(bp));
	size += GET_SIZE(HDRP(NEXT_BLKP(bp)));
	PUT(HDRP(bp), PACK(size, 0));
	PUT(FTRP(bp), PACK(size, 0));
    } 
    else if (!prev_alloc && next_alloc) 
    {         /* Case 3 */
	LLrem(PREV_BLKP(bp));
	size += GET_SIZE(HDRP(PREV_BLKP(bp)));
	PUT(FTRP(bp), PACK(size, 0));
	PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));
	bp = PREV_BLKP(bp);
    } 
    else
    {                                        /* Case 4 */
	LLrem(PREV_BLKP(bp));
	LLrem(NEXT_BLKP(bp));
	size += GET_SIZE(HDRP(PREV_BLKP(bp))) + GET_SIZE(FTRP(NEXT_BLKP(bp)));
	PUT(HDRP(PREV_BLKP(bp)), PACK(size, 0));
	PUT(FTRP(NEXT_BLKP(bp)), PACK(size, 0));
	bp = PREV_BLKP(bp);
    }
    LLadd(bp);
    return (bp);
}
Example #2
0
int main()
{
  LL *head = NULL;
  int i = 0;

  for (i = 0; i < 3; i++)
  {
    LLadd(&head, i);
  }

  LLtraverse(head);
  LLreverse(head, &head);
  printf("\n");
  LLtraverse(head);
  return 0;
}