Association of properties to definitions
This module introduces properties that relate object keys pairwise
to each other, e.g. a type and its pointer type.
The module is instantiated by
$/Prop/Reflex.gnrc+instance=NAME :inst
It defines a pair of properties NAMETo and NAMEFrom
that have values of type DefTableKey that
relate keys pairwise to each other.
When the relation is established between two keys kf and kt
GetNAMETo (kf, NoKey) == kt and
GetNAMEFrom (kt, NoKey) == kf hold.
The relation is established by a call ReflexNAMETo (kf) that
yields a new key kt , or by ReflexNAMEFrom (kt) that
yields a new key kf . Any further such call yields the same
key as result.
Typical applications of such relations are found in type analysis
tasks: Types can be represented by keys. Assume intKey represents
the type int , then a call ReflexPointerTo (intKey)
yields a key representing a type pointer to int .
Using the Reflex functions guarantee that there is exactly
one key representing the type pointer to int .
Here the module is instantiated with the generic parametr
+instance=Pointer . The same pattern can be applied for
other unary type constructors.
|