Since one important goal of Enif is to remain 100% compatible with existing EMME/2 application data, the network structure is essentially given by EMME/2. However, the internal network representation is completely different from the one used in EMME/2 [2,3]. The access and interpretation of EMME/2 network data is completely encapsulated in a separate modular network I/O interface.
Internally all network elements are represented using a common base class. This allows the implementation of many functionalities in a uniform way, independent of the actual type of network elements. This includes functionalities such as data access, handling of network attributes, expression evaluation and the definition of sub-networks by element selection.
The network element types include all those already used in EMME/2, i.e. mode, node, link, transit vehicle, transit line, transit segment and turn. In contrast to EMME/2, matrix related data is also considered part of the generalized network. This leads to the additional network element types zone, origin, destination and O-D pair.
While most data handling can be implemented at the abstract network element level, all network specific aspects have to be implemented at the level of the specific element type, e.g. finding the outgoing or incoming links of a node or following the segments along the itinerary of a transit line. This is achieved by associating with each network element type a type specific set of pointers to other network elements, as well as a set of flags. These are shown in Table 1.
The data associated with an individual network element consists of three parts:
In Enif, a network is defined as the collection of its network elements, an attribute list for each element type (see below) and some auxiliary data, such as titles and element counts.