1pub mod pretty;
2pub mod serde;
3
4pub mod ac_operators;
5mod atom;
6pub mod comprehension;
7mod declaration;
8mod domains;
9mod expressions;
10mod literals;
11pub mod matrix;
12mod model;
13mod name;
14pub mod records;
15mod submodel;
16mod symbol_table;
17mod types;
18mod variables;
19
20pub use atom::Atom;
21pub use declaration::*;
22pub use domains::Domain;
23pub use domains::DomainOpError;
24pub use domains::Range;
25pub use domains::SetAttr;
26pub use expressions::Expression;
27pub use literals::AbstractLiteral;
28pub use literals::Literal;
29pub use model::*;
30pub use name::Name;
31pub use records::RecordEntry;
32pub use submodel::SubModel;
33pub use symbol_table::SymbolTable;
34pub use types::*;
35pub use variables::DecisionVariable;
36
37#[macro_export]
44macro_rules! matrix {
45 () => (
47 $crate::into_matrix![]
48 );
49
50 (;$domain:expr) => (
51 $crate::into_matrix![;$domain]
52 );
53
54 ($x:expr) => (
55 $crate::into_matrix![std::vec![$x]]
56 );
57
58 ($x:expr;$domain:expr) => (
59 $crate::into_matrix![std::vec![$x];$domain]
60 );
61
62 ($($x:expr),*) => (
63 $crate::into_matrix![std::vec![$($x),*]]
64 );
65
66 ($($x:expr),*;$domain:expr) => (
67 $crate::into_matrix![std::vec![$($x),*];$domain]
68 );
69
70 ($($x:expr,)*) => (
71 $crate::into_matrix![std::vec![$($x),*]]
72 );
73
74 ($($x:expr,)*;$domain:expr) => (
75 $crate::into_matrix![std::vec![$($x),*];domain]
76 )
77}
78
79#[macro_export]
86macro_rules! into_matrix {
87 () => (
88 $crate::into_matrix![std::vec::Vec::new()]
89 );
90
91 (;$domain:expr) => (
92 $crate::into_matrix![std::vec::Vec::new();$domain]
93 );
94 ($x:expr) => (
95 $crate::ast::AbstractLiteral::matrix_implied_indices($x)
96 );
97 ($x:expr;$domain:expr) => (
98 $crate::ast::AbstractLiteral::Matrix($x,::std::boxed::Box::new($domain))
99 );
100}
101
102#[macro_export]
108macro_rules! matrix_expr {
109 () => (
110 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![])
111 );
112
113 (;$domain:expr) => (
114 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![;$domain])
115 );
116
117
118 ($x:expr) => (
119 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$x])
120 );
121 ($x:expr;$domain:expr) => (
122 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![;$domain])
123 );
124
125 ($($x:expr),+) => (
126 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+])
127 );
128
129 ($($x:expr),+;$domain:expr) => (
130 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+;$domain])
131 );
132
133 ($($x:expr,)+) => (
134 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+])
135 );
136
137 ($($x:expr,)+;$domain:expr) => (
138 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::matrix![$($x),+;$domain])
139 )
140}
141
142#[macro_export]
149macro_rules! into_matrix_expr {
150 () => (
151 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![])
152 );
153
154 (;$domain:expr) => (
155 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![;$domain])
156 );
157 ($x:expr) => (
158 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![$x])
159 );
160 ($x:expr;$domain:expr) => (
161 $crate::ast::Expression::AbstractLiteral($crate::metadata::Metadata::new(),$crate::into_matrix![$x;$domain])
162 );
163}