@Override
	public final Iterator<Room> getExistingRooms()
	{
		final Room[][] map=this.subMap;
		if(subMap!=null)
			return new Iterator<Room>()
			{
				int x=0;
				int y=0;
				Room R=null;
				private void setRoom()
				{
					while(R==null)
					{
						while((x<map.length)&&(y>=map[x].length))
						{
							y=0;
							x++;
						}
						if(x>=map.length) return;
						if((x<map.length)&&(y<map[x].length))
							R=map[x][y];
						if(R==null) y++;
					}
				}
				@Override public boolean hasNext() { setRoom(); return R!=null;}
				@Override
				public Room next()
				{
					setRoom();
					final Room r = R;
					y++;
					R=null;
					setRoom();
					return r;
				}
				@Override public void remove() {}
			};
		return EmptyIterator.INSTANCE;
	}