@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()
				{
					throw new java.lang.UnsupportedOperationException();
				}
			};
		}
		return emptyIterator;
	}