11c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák/*
21c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Copyright 2011 Tom Stellard <tstellar@gmail.com>
31c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
41c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * All Rights Reserved.
51c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
61c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Permission is hereby granted, free of charge, to any person obtaining
71c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * a copy of this software and associated documentation files (the
81c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * "Software"), to deal in the Software without restriction, including
91c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * without limitation the rights to use, copy, modify, merge, publish,
101c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * distribute, sublicense, and/or sell copies of the Software, and to
111c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * permit persons to whom the Software is furnished to do so, subject to
121c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * the following conditions:
131c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
141c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * The above copyright notice and this permission notice (including the
151c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * next paragraph) shall be included in all copies or substantial
161c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * portions of the Software.
171c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
181c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
191c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
201c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
211c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
221c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
231c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
241c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
251c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
261c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák */
271c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
281c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_list.h"
291c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
301c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include <stdlib.h>
311c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include <stdio.h>
321c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
331c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "memory_pool.h"
341c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
351c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_list * rc_list(struct memory_pool * pool, void * item)
361c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák{
371c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_list * new = memory_pool_malloc(pool, sizeof(struct rc_list));
381c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	new->Item = item;
391c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	new->Next = NULL;
401c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	new->Prev = NULL;
411c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
421c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	return new;
431c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}
441c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
451c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_list_add(struct rc_list ** list, struct rc_list * new_value)
461c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák{
471c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_list * temp;
481c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
491c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	if (*list == NULL) {
501c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		*list = new_value;
511c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		return;
521c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	}
531c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
541c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	for (temp = *list; temp->Next; temp = temp->Next);
551c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
561c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	temp->Next = new_value;
571c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	new_value->Prev = temp;
581c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}
591c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
601c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_list_remove(struct rc_list ** list, struct rc_list * rm_value)
611c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák{
621c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	if (*list == rm_value) {
631c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		*list = rm_value->Next;
641c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		return;
651c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	}
661c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
671c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	rm_value->Prev->Next = rm_value->Next;
681c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	if (rm_value->Next) {
691c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		rm_value->Next->Prev = rm_value->Prev;
701c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	}
711c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}
721c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
731c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákunsigned int rc_list_count(struct rc_list * list)
741c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák{
751c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int count = 0;
761c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	while (list) {
771c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		count++;
781c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		list = list->Next;
791c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	}
801c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	return count;
811c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}
821c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
831c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_list_print(struct rc_list * list)
841c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák{
851c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	while(list) {
861c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		fprintf(stderr, "%p->", list->Item);
871c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		list = list->Next;
881c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	}
891c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	fprintf(stderr, "\n");
901c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}
91