One of the most basic and most important functionalities when dealing with large transportation networks is to provide a flexible and efficient way of accessing attribute values associated with network elements. In Enif, this is implemented using a very generalized approach consisting of network attributes which are structured into attribute lists.
Enif's concept of network attribute is much broader than the one used in EMME/2. While in EMME/2 a network attribute always implies a value which is physically stored in the EMME/2 data bank, in Enif the term attribute covers any kind of predefined value provider for the network elements of a specific type.
Network attributes are characterized by the following properties:
A special data caching mechanism is provided which allows the user to define which attributes should be cached, i.e. stored directly in the data buffer of each network element, instead of reading it on-the-fly from the external data bank whenever needed.
Obtaining an attribute value for a specific network element is done simply by calling the corresponding method of the attribute with the pointer to the network element as argument.
Constant attributes are attributes which are not associated with a particular network element. They can be evaluated for all network element types (or even outside the context of network elements altogether) and will always return the same constant value.
Attributes of the same element type are combined into attribute lists. The network contains one attribute list for the attributes of each element type, and an additional one for constant attributes associated with the network. The latter includes constants such as the scenario number, the scenario title, mode masks and the scalars defined in the data bank.
Additional ``private'' attribute lists may be created when needed, e.g. in the context of a list or a specific mapper.