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