The various possibilities of modelling associations in Gemstone was the main reason to rewrite the whole association support in PUM.
When defining associations you may select :n-association type, the implementation type and add various options to that associations.
You can only select three major association types:
* m:n association types (both sides navigation)
* 1:n associaton bidirectional (both sides navigation)
* 1:n association unidirectional (one side navigation)
After defining the general association type you select among various implementation types: set, bag, dictionary, sort, ordered, indexed
And then you may select options to that association: unique (memebership), identity (membership), conflict (high conflict possibilities) and large (lot of members).
Due to these various options you end up with the following classes in Gemstone suitable for modelling the association: Array, Bag, IdentityBag, RcIdentityBag, IdentitySet, Set, SortedCollection, IdentityDictionary, StringKeyValueDictionary and IntegerKeyValueDictionary.
The main interesting thing is, that OrderedCollection is not used any more. Instead I use the class Array, which seems to be a faster replacement for OrderedCollection.