/*
 * test.h
 *
 *  Created on: Sep 25, 2012
 *      Author: Wayne
 */

#ifndef TEST_H_
#define TEST_H_

#include "intrusive_list.h"

class test_int
{
	uint32_t value;


	DECLARE_INTRUSIVE_LIST(test_int, d);

	public:
	test_int(const uint32_t v) : value(v) {}
	test_int() : value(0) {}

	test_int &operator= (const uint32_t &v) {value = v; return *this;}
	void print(void) {count++; }
	void insert(IntrusiveList& dl) {d.insert_after(dl);}
	void del(void) {d.del();}

	IntrusiveList& list(void){return d;}

    void print_all(void);


};

void test_int::print_all(void)
{
	DECLARE_INTRUSIVE_LIST_ITERATOR(test_int, d) dl(d);
	DECLARE_INTRUSIVE_LIST_ITERATOR(test_int, d) end(dl);

	int i = 0;

	// This is required because the list is circular.
	print();
	++dl;

	while (dl != end)
	{
		dl->print();
		++dl;
		i++;
		if (i > 20) for (;;) ;
	}
}


#endif /* TEST_H_ */
