use num_traits::{AsPrimitive, FromPrimitive, NumAssign, PrimInt, Unsigned};
use std::fmt::{Debug, Display};
pub trait UnsignedInt:
PrimInt
+ Unsigned
+ Display
+ Debug
+ AsPrimitive<usize>
+ AsPrimitive<f64>
+ FromPrimitive
+ NumAssign
{
}
impl UnsignedInt for u16 {}
impl UnsignedInt for u32 {}
#[derive(Debug, Clone)]
pub struct AuctionSolution<I>
where
I: UnsignedInt,
{
pub person_to_object: Vec<I>,
pub object_to_person: Vec<I>,
pub num_unassigned: I,
pub eps: f64,
}
impl<I> AuctionSolution<I>
where
I: UnsignedInt,
{
pub fn new(row_capacity: usize, column_capacity: usize) -> AuctionSolution<I> {
AuctionSolution::<I> {
person_to_object: Vec::with_capacity(row_capacity),
object_to_person: Vec::with_capacity(column_capacity),
eps: f64::NAN,
num_unassigned: I::max_value(),
}
}
}