Skip to main content
Jump to: navigation, search

ATL/Design Patterns

< ATL
Revision as of 05:16, 28 February 2015 by Dwagelaar.gmail.com (Talk | contribs) (Created page with "== ATL Design Patterns == This page describes various [http://en.wikipedia.org/wiki/Software_design_pattern design patterns] that are specific to the use of ATL. === Mapped-...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

ATL Design Patterns

This page describes various design patterns that are specific to the use of ATL.

Mapped-By

If you find yourself executing the following code many times, the Mapped-By pattern may be useful to you:

 METAMODEL!MetaClass.allInstances()->any(e | e.property = variable.property)

This code is expensive if executed more than once, because it has to iterate over all instances of METAMODEL!MetaClass every time (O(n)). Instead, you can create a Map that indexes all instanced by their requested property:

 helper def : metaClassByProperty : Map(OclAny, METAMODEL!MetaClass) =
   METAMODEL!MetaClass.allInstances()->iterate(e; acc : Map(OclAny, METAMODEL!MetaClass) = Map{} |
     acc->including(e.property, e)
   );

Building the Map still runs in O(n), but after that, you can write the initial code as follows:

 thisModule.metaClassByProperty.get(variable.property)

Because this is a hash map lookup, it runs in O(1).

Back to the top