Syntactic sugar for read-only access to netlists, layouts, hierarchies.
The basic traits for hierarchy, netlist and layout access are based on object IDs - handles which can
cheaply be cloned. In the implementation this could be for instance integer numbers.
Working with IDs also has disadvantages such as non-object-style syntax.
For example to get all pins of a cell one might want to write
cell.each_pin() instead of making the
This is where 'reference access' wrappers come into play. They wrap the object ID together with an immutable
reference to the base data-structure (a
LayoutBase, ... trait).
The wrapper data type now behaves much like an object with associated function. In the background this all
maps back to the trait implementation with object IDs. Therefore the data-type implementing such traits needs
only to provide ID based access and gets object-like access for free.
This access method is currently limited to read-only access. Good use cases are code pieces
which do not modify anything but for example analyze a netlist.