/*#io
docCopyright("Steve Dekorte", 2002)
docLicense("BSD revised")
*/

#ifdef COLLECTORMARKER_C 
#define IO_IN_C_FILE
#endif
#include "Common_inline.h"
#ifdef IO_DECLARE_INLINES

IOINLINE void CollectorMarker_insertAfter_(CollectorMarker *self, CollectorMarker *other)
{ 
	self->color = other->color;
	
	self->prev = other;
	self->next = other->next;
	
	other->next->prev = self;
	other->next = self;
}

/*
IOINLINE void CollectorMarker_insertBefore_(CollectorMarker *self, CollectorMarker *other)
{ 
	self->color = other->color;
	
	self->prev = other->prev;
	self->next = other;
	
	other->prev->next = self;
	other->prev = self;
}
*/

IOINLINE void CollectorMarker_remove(CollectorMarker *self)
{ 	
	self->prev->next = self->next;
	self->next->prev = self->prev;
}

IOINLINE void CollectorMarker_removeAndInsertAfter_(CollectorMarker *self, CollectorMarker *other)
{
	CollectorMarker_remove(self);
	CollectorMarker_insertAfter_(self, other);
}

/*
IOINLINE void CollectorMarker_removeAndInsertBefore_(CollectorMarker *self, CollectorMarker *other)
{
	CollectorMarker_remove(self);
	CollectorMarker_insertBefore_(self, other);
}
*/

IOINLINE void CollectorMarker_removeIfNeededAndInsertAfter_(CollectorMarker *self, CollectorMarker *other)
{
	if (self->prev) 
	{
		CollectorMarker_remove(self);
	}
	
	CollectorMarker_insertAfter_(self, other);
}

IOINLINE int CollectorMarker_isEmpty(CollectorMarker *self)
{ 
	return (self->color != self->next->color);
}

#undef IO_IN_C_FILE
#endif


syntax highlighted by Code2HTML, v. 0.9.1