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