1extern crate bit_set;
5extern crate num_rational;
6extern crate num_traits;
7
8use std::collections::HashMap;
9use std::ops;
10use num_rational::Rational32;
11
12pub use constraint::Constraint;
13pub use puzzle::Puzzle;
14pub use puzzle::PuzzleSearch;
15
16#[derive(Copy,Clone,Debug,Eq,Hash,PartialEq)]
18pub struct VarToken(usize);
19
20pub type Val = i32;
22
23pub type Coef = Rational32;
25
26#[derive(Clone)]
32pub struct LinExpr {
33 constant: Coef,
34
35 coef: HashMap<VarToken, Coef>,
39}
40
41pub type PsResult<T> = Result<T, ()>;
43
44#[derive(Debug)]
46pub struct Solution {
47 vars: Vec<Val>,
48}
49
50pub mod constraint;
51
52mod linexpr;
53mod puzzle;
54
55impl ops::Index<VarToken> for Solution {
56 type Output = Val;
57 fn index(&self, var: VarToken) -> &Val {
58 let VarToken(idx) = var;
59 &self.vars[idx]
60 }
61}