Struct ddo::CompareSubProblem

source ·
pub struct CompareSubProblem<X: SubProblemRanking>(/* private fields */);
Expand description

This is a thin wrapper to convert a SubProblemRanking into a Compare object as is sometimes required (e.g. to configure the order in a binary heap)

This struct has no behavior of its own: it simply delegates to the underlying implementation.

§Example

 
// Assuming the existence of a simple KnapsackState type
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct KnapsackState {
    depth: usize,
    capacity: usize
}
 
// One can define a simple StateRanking to compare these states
struct KPRanking;
impl StateRanking for KPRanking {
    type State = KnapsackState;
     
    fn compare(&self, a: &Self::State, b: &Self::State) -> std::cmp::Ordering {
        a.capacity.cmp(&b.capacity)
    }
}
 
// However, if you were in need to create a heap capable of ordering
// the sub-problems with your custom state ranking, you would need to use an
// object that implements the `Compare` trait. This is what `CompareSubProblem`
// is used for: it provides a convenient zero sized adapter for that
// purpose.
 
// This allows to compare two sub-problems, ordering them in best first order
let comparator = CompareSubProblem::new(MaxUB::new(&KPRanking));
 
// And that comparator can in turn be used to parameterize the behavior
// of a heap (for instance).
let heap = BinaryHeap::from_vec_cmp(vec![], comparator);

Implementations§

source§

impl<X: SubProblemRanking> CompareSubProblem<X>

source

pub fn new(x: X) -> Self

Creates a new instance

Trait Implementations§

source§

impl<X: Clone + SubProblemRanking> Clone for CompareSubProblem<X>

source§

fn clone(&self) -> CompareSubProblem<X>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<X: SubProblemRanking> Compare<SubProblem<<X as SubProblemRanking>::State>> for CompareSubProblem<X>

source§

fn compare( &self, l: &SubProblem<X::State>, r: &SubProblem<X::State> ) -> Ordering

Compares two values, returning Less, Equal, or Greater if l is less than, equal to, or greater than r, respectively.
source§

fn compares_lt(&self, l: &L, r: &R) -> bool

Checks if l is less than r.
source§

fn compares_le(&self, l: &L, r: &R) -> bool

Checks if l is less than or equal to r.
source§

fn compares_ge(&self, l: &L, r: &R) -> bool

Checks if l is greater than or equal to r.
source§

fn compares_gt(&self, l: &L, r: &R) -> bool

Checks if l is greater than r.
source§

fn compares_eq(&self, l: &L, r: &R) -> bool

Checks if l is equal to r.
source§

fn compares_ne(&self, l: &L, r: &R) -> bool

Checks if l is not equal to r.
source§

fn borrowing(self) -> Borrowing<Self, L, R>
where Self: Sized,

Borrows the comparator’s parameters before comparing them. Read more
source§

fn rev(self) -> Rev<Self>
where Self: Sized,

Reverses the ordering of the comparator. Read more
source§

fn swap(self) -> Swap<Self>
where Self: Sized,

Swaps the comparator’s parameters, maintaining the underlying ordering. Read more
source§

fn then<D>(self, then: D) -> Then<Self, D>
where D: Compare<L, R>, Self: Sized,

Lexicographically combines the comparator with another. Read more
source§

impl<X: Debug + SubProblemRanking> Debug for CompareSubProblem<X>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<X: Copy + SubProblemRanking> Copy for CompareSubProblem<X>

Auto Trait Implementations§

§

impl<X> RefUnwindSafe for CompareSubProblem<X>
where X: RefUnwindSafe,

§

impl<X> Send for CompareSubProblem<X>
where X: Send,

§

impl<X> Sync for CompareSubProblem<X>
where X: Sync,

§

impl<X> Unpin for CompareSubProblem<X>
where X: Unpin,

§

impl<X> UnwindSafe for CompareSubProblem<X>
where X: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

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.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.