Aria maps are implemented by a collection of classes and interfaces. The most important is the ArMapInterface, which is defined in ArMapInterface.h and specifies the methods that all Aria maps must provide.
This file contains the top-level concrete implementation of the ArMapInterface. ArMap is basically the map that is used by the robot to navigate its environment. In addition to implementing the methods of ArMapInterface, ArMap also provides a means of hooking into the Aria config. When the map file name is specified in the Aria config and is changed during runtime, ArMap loads the new file and notifies all listeners that the map has been changed.
In order to accomplish this, ArMap has been implemented using the Proxy design pattern (refer to "Design Patterns", Gamma et al, 1995). The participants are as follows:
The following "diagram" illustrates the basic hierarchy:
ArMapInterface , Defined in ArMapInterface.h ^ (extends) ^ | | | | ArMap +-------> ArMapSimple * +-------> ArMapScan * (contains) | +-------> ArMapObjects * | +-------> ArMapInfo * | +-------> ArMapSupplement *
* : Defined in ArMapComponents.h
This header file originally also contained the definition of ArMapObject. That class has been moved into its own header file (ArMapObject.h).
Maintenance Note #1: In this case, the use of the Proxy design pattern implies that modifying the ArMap external interface requires multiple changes: First, the ArMapInterface (or sub-interface) must be updated. Then the ArMap and ArMapSimple classes must be modified. Depending on the change, one of the helper map components may also need to be modified. It is expected that such changes to the interface will be infrequent.
#include "ariaTypedefs.h"
#include "ariaUtil.h"
#include "ArMapComponents.h"
#include "ArMapInterface.h"
#include "ArMapUtils.h"
#include "ArFunctor.h"
#include "ArArgumentBuilder.h"
#include "ArMutex.h"
#include <vector>