pub struct ResolvedBlockBounds { /* private fields */ }Expand description
Pre-resolved per-block bound override table for every block-eligible entity family, across all stages and blocks.
Every family Vec is indexed
(entity_idx * n_stages + stage_idx) * max_blocks + block_idx, and is
independently lazy: a family stays empty until a row actually resolves to
a cell in that family (via its own <family>_override_mut), so a study
with a block row in only one family never allocates the other four. An
empty table (ResolvedBlockBounds::empty) is the state for every study
with no block_id bound row at all; every reader then returns the family
default and every writer returns None.
§Examples
use cobre_core::resolved::ResolvedBlockBounds;
let empty = ResolvedBlockBounds::empty();
assert!(empty.is_empty());
assert_eq!(empty.thermal_override(3, 7, 2).max_generation_mw, None);Implementations§
Source§impl ResolvedBlockBounds
impl ResolvedBlockBounds
Sourcepub fn empty() -> Self
pub fn empty() -> Self
Create an empty per-block override table; every reader returns the
family default and every writer returns None.
§Examples
use cobre_core::resolved::ResolvedBlockBounds;
let t = ResolvedBlockBounds::empty();
assert!(t.is_empty());
assert_eq!(t.hydro_override(5, 3, 2).min_turbined_m3s, None);Sourcepub fn new(counts: &BlockBoundsCountsSpec) -> Self
pub fn new(counts: &BlockBoundsCountsSpec) -> Self
Store the table’s dimensions; every family Vec starts empty —
<family>_override_mut grows its own family to full size on its first
successful write, so a family with zero applied rows stays empty (and
is_empty stays true while every family does).
Sourcepub fn hydro_override(
&self,
hydro_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> HydroBlockOverride
pub fn hydro_override( &self, hydro_idx: usize, stage_idx: usize, block_idx: usize, ) -> HydroBlockOverride
Look up the hydro per-block override at (hydro_idx, stage_idx, block_idx).
Returns HydroBlockOverride::default (all None) when the table is
empty or any index is out of range.
Sourcepub fn hydro_override_mut(
&mut self,
hydro_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> Option<&mut HydroBlockOverride>
pub fn hydro_override_mut( &mut self, hydro_idx: usize, stage_idx: usize, block_idx: usize, ) -> Option<&mut HydroBlockOverride>
Return a mutable handle to the hydro per-block override cell, growing
this family to full size on its first call, or None when the table
is empty or any index is out of range.
Sourcepub fn thermal_override(
&self,
thermal_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> ThermalBlockOverride
pub fn thermal_override( &self, thermal_idx: usize, stage_idx: usize, block_idx: usize, ) -> ThermalBlockOverride
Look up the thermal per-block override at (thermal_idx, stage_idx, block_idx).
Returns ThermalBlockOverride::default (all None) when the table
is empty or any index is out of range.
Sourcepub fn thermal_override_mut(
&mut self,
thermal_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> Option<&mut ThermalBlockOverride>
pub fn thermal_override_mut( &mut self, thermal_idx: usize, stage_idx: usize, block_idx: usize, ) -> Option<&mut ThermalBlockOverride>
Return a mutable handle to the thermal per-block override cell,
growing this family to full size on its first call, or None when
the table is empty or any index is out of range.
Sourcepub fn line_override(
&self,
line_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> LineBlockOverride
pub fn line_override( &self, line_idx: usize, stage_idx: usize, block_idx: usize, ) -> LineBlockOverride
Look up the line per-block override at (line_idx, stage_idx, block_idx).
Returns LineBlockOverride::default (all None) when the table is
empty or any index is out of range.
Sourcepub fn line_override_mut(
&mut self,
line_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> Option<&mut LineBlockOverride>
pub fn line_override_mut( &mut self, line_idx: usize, stage_idx: usize, block_idx: usize, ) -> Option<&mut LineBlockOverride>
Return a mutable handle to the line per-block override cell, growing
this family to full size on its first call, or None when the table
is empty or any index is out of range.
Sourcepub fn pumping_override(
&self,
pumping_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> PumpingBlockOverride
pub fn pumping_override( &self, pumping_idx: usize, stage_idx: usize, block_idx: usize, ) -> PumpingBlockOverride
Look up the pumping per-block override at (pumping_idx, stage_idx, block_idx).
Returns PumpingBlockOverride::default (all None) when the table
is empty or any index is out of range.
Sourcepub fn pumping_override_mut(
&mut self,
pumping_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> Option<&mut PumpingBlockOverride>
pub fn pumping_override_mut( &mut self, pumping_idx: usize, stage_idx: usize, block_idx: usize, ) -> Option<&mut PumpingBlockOverride>
Return a mutable handle to the pumping per-block override cell,
growing this family to full size on its first call, or None when
the table is empty or any index is out of range.
Sourcepub fn contract_override(
&self,
contract_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> ContractBlockOverride
pub fn contract_override( &self, contract_idx: usize, stage_idx: usize, block_idx: usize, ) -> ContractBlockOverride
Look up the contract per-block override at (contract_idx, stage_idx, block_idx).
Returns ContractBlockOverride::default (all None) when the table
is empty or any index is out of range.
Sourcepub fn contract_override_mut(
&mut self,
contract_idx: usize,
stage_idx: usize,
block_idx: usize,
) -> Option<&mut ContractBlockOverride>
pub fn contract_override_mut( &mut self, contract_idx: usize, stage_idx: usize, block_idx: usize, ) -> Option<&mut ContractBlockOverride>
Return a mutable handle to the contract per-block override cell,
growing this family to full size on its first call, or None when
the table is empty or any index is out of range.
Trait Implementations§
Source§impl Clone for ResolvedBlockBounds
impl Clone for ResolvedBlockBounds
Source§fn clone(&self) -> ResolvedBlockBounds
fn clone(&self) -> ResolvedBlockBounds
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more