1pub mod pretty;
2pub mod serde;
3
4mod atom;
5mod declaration;
6mod domains;
7mod expressions;
8mod literals;
9mod model;
10mod name;
11mod submodel;
12mod symbol_table;
13mod types;
14mod variables;
15
16pub use atom::Atom;
17pub use declaration::*;
18pub use domains::Domain;
19pub use domains::Range;
20pub use domains::SetAttr;
21pub use expressions::Expression;
22pub use literals::AbstractLiteral;
23pub use literals::Literal;
24pub use model::*;
25pub use name::Name;
26pub use submodel::SubModel;
27pub use symbol_table::SymbolTable;
28pub use types::*;
29pub use variables::DecisionVariable;
30
31#[macro_export]
38macro_rules! matrix {
39 () => (
41 $crate::into_matrix![]
42 );
43
44 (;$domain:expr) => (
45 $crate::into_matrix![;$domain]
46 );
47
48 ($x:expr) => (
49 $crate::into_matrix![std::vec![$x]]
50 );
51
52 ($x:expr;$domain:expr) => (
53 $crate::into_matrix![std::vec![$x];$domain]
54 );
55
56 ($($x:expr),*) => (
57 $crate::into_matrix![std::vec![$($x),*]]
58 );
59
60 ($($x:expr),*;$domain:expr) => (
61 $crate::into_matrix![std::vec![$($x),*];$domain]
62 );
63
64 ($($x:expr,)*) => (
65 $crate::into_matrix![std::vec![$($x),*]]
66 );
67
68 ($($x:expr,)*;$domain:expr) => (
69 $crate::into_matrix![std::vec![$($x),*];domain]
70 )
71}
72
73#[macro_export]
80macro_rules! into_matrix {
81 () => (
82 $crate::into_matrix![std::vec::Vec::new()]
83 );
84
85 (;$domain:expr) => (
86 $crate::into_matrix![std::vec::Vec::new();$domain]
87 );
88 ($x:expr) => (
89 $crate::ast::AbstractLiteral::matrix_implied_indices($x)
90 );
91 ($x:expr;$domain:expr) => (
92 $crate::ast::AbstractLiteral::Matrix($x,$domain)
93 );
94}
95
96#[macro_export]
102macro_rules! matrix_expr {
103 () => (
104 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![])
105 );
106
107 (;$domain:expr) => (
108 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![;$domain])
109 );
110
111
112 ($x:expr) => (
113 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$x])
114 );
115 ($x:expr;$domain:expr) => (
116 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![;$domain])
117 );
118
119 ($($x:expr),+) => (
120 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+])
121 );
122
123 ($($x:expr),+;$domain:expr) => (
124 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+;$domain])
125 );
126
127 ($($x:expr,)+) => (
128 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+])
129 );
130
131 ($($x:expr,)+;$domain:expr) => (
132 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+;$domain])
133 )
134}
135
136#[macro_export]
143macro_rules! into_matrix_expr {
144 () => (
145 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![])
146 );
147
148 (;$domain:expr) => (
149 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![;$domain])
150 );
151 ($x:expr) => (
152 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![$x])
153 );
154 ($x:expr;$domain:expr) => (
155 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![$x;$domain])
156 );
157}