Trait libreda_db::layout::traits::LayoutBase
source · [−]pub trait LayoutBase: HierarchyBase {
type Coord: CoordinateType + Debug + Display + Hash + 'static + Send + Sync;
type Area: Num + Copy + PartialOrd + From<Self::Coord> + 'static + Send + Sync;
type LayerId: Eq + Hash + Clone + Debug + 'static;
type ShapeId: Eq + Hash + Clone + Debug + 'static;
Show 16 methods
fn dbu(&self) -> Self::Coord;
fn each_layer(&self) -> Box<dyn Iterator<Item = Self::LayerId> + '_>;
fn layer_info(&self, layer: &Self::LayerId) -> LayerInfo<Self::NameType>;
fn find_layer(&self, index: UInt, datatype: UInt) -> Option<Self::LayerId>;
fn layer_by_name(&self, name: &str) -> Option<Self::LayerId>;
fn bounding_box_per_layer(
&self,
cell: &Self::CellId,
layer: &Self::LayerId
) -> Option<Rect<Self::Coord>>;
fn each_shape_id(
&self,
cell: &Self::CellId,
layer: &Self::LayerId
) -> Box<dyn Iterator<Item = Self::ShapeId> + '_>;
fn for_each_shape<F>(&self, cell: &Self::CellId, layer: &Self::LayerId, f: F)
where
F: FnMut(&Self::ShapeId, &Geometry<Self::Coord>);
fn with_shape<F, R>(&self, shape_id: &Self::ShapeId, f: F) -> R
where
F: FnMut(&Self::LayerId, &Geometry<Self::Coord>) -> R;
fn parent_of_shape(
&self,
shape_id: &Self::ShapeId
) -> (Self::CellId, Self::LayerId);
fn get_transform(
&self,
cell_inst: &Self::CellInstId
) -> SimpleTransform<Self::Coord>;
fn bounding_box(&self, cell: &Self::CellId) -> Option<Rect<Self::Coord>> { ... }
fn shape_geometry(&self, shape_id: &Self::ShapeId) -> Geometry<Self::Coord> { ... }
fn shape_layer(&self, shape_id: &Self::ShapeId) -> Self::LayerId { ... }
fn for_each_shape_recursive<F>(
&self,
cell: &Self::CellId,
layer: &Self::LayerId,
f: F
)
where
F: FnMut(SimpleTransform<Self::Coord>, &Self::ShapeId, &Geometry<Self::Coord>),
{ ... }
fn get_shape_property(
&self,
shape: &Self::ShapeId,
key: &Self::NameType
) -> Option<PropertyValue> { ... }
}
Expand description
Most basic trait of a layout.
This traits specifies methods for accessing the components of a layout.
Required Associated Types
Number type used for coordinates and distances.
Number type for areas.
This is possibly another type then Coord
for the following reasons:
- Distances and areas are semantically different.
- In practice
i32
is a good choice for coordinates. However, computing areas ini32
might easily lead to overflows. Hence a 64-bit integer type might be a better choice.
Required Methods
fn each_layer(&self) -> Box<dyn Iterator<Item = Self::LayerId> + '_>
fn each_layer(&self) -> Box<dyn Iterator<Item = Self::LayerId> + '_>
Iterate over all defined layers.
fn layer_info(&self, layer: &Self::LayerId) -> LayerInfo<Self::NameType>
fn layer_info(&self, layer: &Self::LayerId) -> LayerInfo<Self::NameType>
Get the LayerInfo
data structure for this layer.
Find layer index by the (index, data type) tuple.
fn layer_by_name(&self, name: &str) -> Option<Self::LayerId>
fn layer_by_name(&self, name: &str) -> Option<Self::LayerId>
Find layer index by the name.
Compute the bounding box of the shapes on one layer. The bounding box also includes all child cell instances.
Iterate over the IDs of all shapes in the cell on a specific layer.
Call a function for each shape on this layer.
Access a shape by its ID.
fn parent_of_shape(
&self,
shape_id: &Self::ShapeId
) -> (Self::CellId, Self::LayerId)
fn parent_of_shape(
&self,
shape_id: &Self::ShapeId
) -> (Self::CellId, Self::LayerId)
Get the parent cell and the layer of a shape as a (cell, layer) tuple.
fn get_transform(
&self,
cell_inst: &Self::CellInstId
) -> SimpleTransform<Self::Coord>
fn get_transform(
&self,
cell_inst: &Self::CellInstId
) -> SimpleTransform<Self::Coord>
Get the geometric transform that describes the location of a cell instance relative to its parent.
Provided Methods
Compute the bounding box of the cell over all layers.
The bounding box is not defined if the cell is empty. In this
case return None
.
fn shape_geometry(&self, shape_id: &Self::ShapeId) -> Geometry<Self::Coord>
fn shape_geometry(&self, shape_id: &Self::ShapeId) -> Geometry<Self::Coord>
Get a clone of the shape geometry.
fn shape_layer(&self, shape_id: &Self::ShapeId) -> Self::LayerId
fn shape_layer(&self, shape_id: &Self::ShapeId) -> Self::LayerId
Get the layer of a shape.
fn for_each_shape_recursive<F>(
&self,
cell: &Self::CellId,
layer: &Self::LayerId,
f: F
) where
F: FnMut(SimpleTransform<Self::Coord>, &Self::ShapeId, &Geometry<Self::Coord>),
fn for_each_shape_recursive<F>(
&self,
cell: &Self::CellId,
layer: &Self::LayerId,
f: F
) where
F: FnMut(SimpleTransform<Self::Coord>, &Self::ShapeId, &Geometry<Self::Coord>),
Call a function f
for each shape of this cell and its sub cells.
Along to the geometric shape f
also gets a transformation as argument.
The transformation describes the actual position of the geometric shape relative to the cell
.
fn get_shape_property(
&self,
shape: &Self::ShapeId,
key: &Self::NameType
) -> Option<PropertyValue>
fn get_shape_property(
&self,
shape: &Self::ShapeId,
key: &Self::NameType
) -> Option<PropertyValue>
Get a property of a shape.