[][src]Trait kas::layout::RulesSolver

pub trait RulesSolver {
    type Storage: Clone;
    type ChildInfo;
    fn for_child<CR: FnOnce(AxisInfo) -> SizeRules>(
        &mut self,
        storage: &mut Self::Storage,
        child_info: Self::ChildInfo,
        child_rules: CR
    );
fn finish(self, storage: &mut Self::Storage) -> SizeRules; }

A SizeRules solver for layouts

Typically, a solver is invoked twice, once for each axis, before the corresponding RulesSetter is invoked. This is managed by SolveCache.

Implementations require access to storage able to persist between multiple solver runs and a subsequent setter run. This storage is of type RulesSolver::Storage and is passed via reference to the constructor.

Associated Types

type Storage: Clone

Type of storage

type ChildInfo

Type required by RulesSolver::for_child (see implementation documentation)

Loading content...

Required methods

fn for_child<CR: FnOnce(AxisInfo) -> SizeRules>(
    &mut self,
    storage: &mut Self::Storage,
    child_info: Self::ChildInfo,
    child_rules: CR
)

Called once for each child. For most layouts the order is important.

fn finish(self, storage: &mut Self::Storage) -> SizeRules

Called at the end to output SizeRules.

Note that this does not include margins!

Loading content...

Implementors

impl RulesSolver for SingleSolver[src]

type Storage = ()

type ChildInfo = ()

impl<CSR, RSR, S: GridStorage> RulesSolver for GridSolver<CSR, RSR, S> where
    CSR: AsRef<[(SizeRules, u32, u32)]> + AsMut<[(SizeRules, u32, u32)]>,
    RSR: AsRef<[(SizeRules, u32, u32)]> + AsMut<[(SizeRules, u32, u32)]>, 
[src]

type Storage = S

type ChildInfo = GridChildInfo

impl<S: RowStorage> RulesSolver for RowSolver<S>[src]

type Storage = S

type ChildInfo = usize

Loading content...