pub struct PlacementProblemOverlay<'a, C: L2NBase> {
    pub placement_problem: &'a dyn PlacementProblem<C>,
    pub initial_positions: HashMap<C::CellInstId, SimpleTransform<C::Coord>>,
    pub placement_status: HashMap<C::CellInstId, PlacementStatus>,
    pub net_weights: HashMap<C::NetId, f64>,
}
Expand description

Overlay data for PlacementProblems. This struct takes a PlacementProblem and stores updates of initial positions, placement status and net weights. All values which where not set to new values default back to the underlying PlacementProblem. This allows to update such values of a immutable PlacementProblem with no cloning.

Fields§

§placement_problem: &'a dyn PlacementProblem<C>

Underlying placement problem.

§initial_positions: HashMap<C::CellInstId, SimpleTransform<C::Coord>>

Updates for initial positions.

§placement_status: HashMap<C::CellInstId, PlacementStatus>

Updates for placement status.

§net_weights: HashMap<C::NetId, f64>

Updates for net weights.

Implementations§

source§

impl<'a, C: L2NBase> PlacementProblemOverlay<'a, C>

source

pub fn new(placement_problem: &'a dyn PlacementProblem<C>) -> Self

Create a new overlay over placement_problem without any updates. The returned placement problem will return the same values but they can be updated without changing the underlying values.

Trait Implementations§

source§

impl<'a, C: L2NBase> PlacementProblem<C> for PlacementProblemOverlay<'a, C>

Representation of the placement task.

source§

fn fused_layout_netlist(&self) -> &C

Get the base layout/netlist structure.
source§

fn top_cell(&self) -> C::CellId

Get the top cell whose content should be placed.
source§

fn placement_region(&self) -> Vec<SimpleRPolygon<C::Coord>>

Get a list of polygons which describe where cells are allowed to be placed.
source§

fn soft_blockages(&self) -> Vec<SimpleRPolygon<C::Coord>>

Get regions which should not be used for placement but can if necessary. Overlap of cells with this regions should be minimized.
source§

fn initial_position( &self, cell_instance: &C::CellInstId ) -> SimpleTransform<C::Coord>

Get the position of a cell instance which should be used as an initial value for the optimization. This is most likely the output of the previous placement step.
source§

fn placement_status(&self, cell_instance: &C::CellInstId) -> PlacementStatus

Tell if the cell instance can be moved by the placement engine.
source§

fn cell_outline(&self, cell: &C::CellId) -> Option<Rect<C::Coord>>

Get the abutment box / outline of the cell.
source§

fn net_weight(&self, net: &C::NetId) -> f64

Get the weight of a net. Default is 1.0. When optimizing the wire-length, the weighted wire-length should be used. For example a weight 0.0 means that the net should not be considered for wire-length optimization.
source§

fn cell_instance_outline( &self, cell_instance: &C::CellInstId ) -> Option<Rect<C::Coord>>

Get the abutment box / outline of the cell instance.
source§

fn get_fixed_instances(&self) -> HashSet<C::CellInstId>

Get the set of fixed instances.
source§

fn get_movable_instances(&self) -> HashSet<C::CellInstId>

Get the set of movable cell instances.

Auto Trait Implementations§

§

impl<'a, C> !RefUnwindSafe for PlacementProblemOverlay<'a, C>

§

impl<'a, C> !Send for PlacementProblemOverlay<'a, C>

§

impl<'a, C> !Sync for PlacementProblemOverlay<'a, C>

§

impl<'a, C> Unpin for PlacementProblemOverlay<'a, C>where <C as HierarchyIds>::CellInstId: Unpin, <C as LayoutIds>::Coord: Unpin, <C as NetlistIds>::NetId: Unpin,

§

impl<'a, C> !UnwindSafe for PlacementProblemOverlay<'a, C>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.