
h2(#Extensions). Extensions (in the Unified/Pivot OCL prototype)

This section highlights some of the OCL extensions prototyped by the Pivot OCL.

h3. Map(K,V)

The Map type provides a familiar functionality comprising a set of keys with associated values.

Like all other OCL types, the Map type is immutable; there are therefore not *put* or *set* operations, rather a new Map may be created by *including* a key-value pair tigether with an old Map.

The content of a Map may be accessed using *at*, which returns invalid for an unknown key in the same way as an ordered collection returns invalid for an unknwon index.

A Map may be created explicitly using the new Map Literal Syntax. Thus *Map(Integer,String){1 <- 'one',2 <- 'two'}*
creates a Map of Integer to String with *'one'* bound to *1* and *'two'* bound to *2*. The type *(Integer,String)*
parameterisation can be omitted. *null* but not *invalid* values are permitted as keys and values.

The new *collectBy* iteration may be used to construct a map from a collection or map. The iterators of the *collectBy* define the keys and the value of the body of defines the values. For instance *Sequence{1..10}->collectBy(i | i+i)}* builds a map from the values 1 to 10 to the even values 2 to 20.

Most standard collection iteration operations are available for Maps using the map keys as the (primary) iterator. A secondary value iterator may be specified using the new binds-to syntax. Thus *Map{1<-1,2<-4,3<-9}->reject(k<-v | k = 2 or v = 9}* defines a reject iteration over the three entry map, with a primary iterator *k* over the set of keys and a secondary co-iterator *v* over the values bound to each key. The body causes the second entry with key 2, and the third entry with value 9 to be rejected leaving just a one entry map.

h4. Details

The OCL metamodel is extended by a MapLiteralExp and MapType. A new abstract IterableType captures the iterable commonality of CollectionType and MapType without making map a collection.

The OCL standard library defines the new Map operations and the new Collection::collectBy itetation.

The OCL syntax is extended by the MapLiteralExp syntax and the binds-to co-iterator syntax for all iterators.

The OCL run-time is extended by a MapValue and an abstract IteravleValue to capture the commonality with CollectionValue.

