#ifndef NETWORKLIB_ROUTERS_LIST_H
#define NETWORKLIB_ROUTERS_LIST_H

class RouterListIterator;

class RouterList : public NetworkObject {

	public:
		RouterList();
		~RouterList();

		void Clear();

		Router & AddRouter( const RouterPosition & router_psotion );
		void RemoveRouter( const RouterPosition & router_psotion );

		unsigned int GetRouterNum() const;
		Router * GetRouter( const RouterPosition & router_psotion ) const; 

		friend class RouterListIterator;

	private:
		
		struct RouterListEntry { 
						Router			* router; 
						RouterListEntry * next; 
		};
		
		RouterListEntry * first;
};

class RouterListIterator {
	public:
		RouterListIterator( RouterList * par=0 ) { list = par; current = list ? list->first : 0; }
		~RouterListIterator()		{}

		void Init( RouterList * par )	{ list = par; current = list->first; }  
		Router * GetRouter() const		{
											return current ? current->router : 0;
										}
		
		Router * operator++(int)		{ 
											if( current ) 
												current = current->next;
											return current ? current->router : 0;
										}

		void Begin()					{ current = list->first; }
		bool IsEnd() const				{ return (current == 0); }

	private:
		RouterList					* list;
		RouterList::RouterListEntry * current;
};

#endif // NETWORKLIB_ROUTERS_LIST_H
