conjure_cp_core/ast/
mod.rs1pub mod ac_operators;
2mod atom;
3pub mod categories;
4mod cnf_clause;
5pub mod comprehension;
6pub mod declaration;
7mod domains;
8pub mod eval;
9mod expressions;
10mod literals;
11pub mod matrix;
12mod metadata;
13mod model;
14mod name;
15pub mod pretty;
16pub mod records;
17mod reference;
18pub mod serde;
19mod submodel;
20mod symbol_table;
21mod types;
22mod variables;
23
24mod moo;
25mod partial_eval;
26
27pub use atom::Atom;
28pub use cnf_clause::CnfClause;
29pub use declaration::{DeclarationKind, DeclarationPtr};
30pub use domains::{
31 Domain, DomainOpError, DomainPtr, FuncAttr, GroundDomain, HasDomain, IntVal, JectivityAttr,
32 PartialityAttr, Range, RecordEntry, RecordEntryGround, SetAttr, UnresolvedDomain,
33};
34pub use eval::eval_constant;
35pub use expressions::Expression;
36pub use literals::AbstractLiteral;
37pub use literals::Literal;
38pub use metadata::Metadata;
39pub use model::*;
40pub use moo::Moo;
41pub use name::Name;
42pub use partial_eval::run_partial_evaluator;
43pub use reference::Reference;
44pub use submodel::SubModel;
45pub use symbol_table::SymbolTable;
46pub use types::*;
47pub use variables::DecisionVariable;
48
49#[macro_export]
56macro_rules! matrix {
57 () => (
59 $crate::into_matrix![]
60 );
61
62 (;$domain:expr) => (
63 $crate::into_matrix![;$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 ($($x:expr,)*) => (
83 $crate::into_matrix![std::vec![$($x),*]]
84 );
85
86 ($($x:expr,)*;$domain:expr) => (
87 $crate::into_matrix![std::vec![$($x),*];$domain]
88 )
89}
90
91#[macro_export]
98macro_rules! into_matrix {
99 () => (
100 $crate::into_matrix![std::vec::Vec::new()]
101 );
102
103 (;$domain:expr) => (
104 $crate::into_matrix![std::vec::Vec::new();$domain]
105 );
106 ($x:expr) => (
107 $crate::ast::AbstractLiteral::matrix_implied_indices($x)
108 );
109 ($x:expr;$domain:expr) => (
110 $crate::ast::AbstractLiteral::Matrix($x,$domain)
111 );
112}
113
114#[macro_export]
120macro_rules! matrix_expr {
121 () => (
122 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![])
123 );
124
125 (;$domain:expr) => (
126 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
127 );
128
129
130 ($x:expr) => (
131 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$x])
132 );
133 ($x:expr;$domain:expr) => (
134 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
135 );
136
137 ($($x:expr),+) => (
138 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
139 );
140
141 ($($x:expr),+;$domain:expr) => (
142 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
143 );
144
145 ($($x:expr,)+) => (
146 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
147 );
148
149 ($($x:expr,)+;$domain:expr) => (
150 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
151 )
152}
153
154#[macro_export]
161macro_rules! into_matrix_expr {
162 () => (
163 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![])
164 );
165
166 (;$domain:expr) => (
167 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![;$domain])
168 );
169 ($x:expr) => (
170 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x])
171 );
172 ($x:expr;$domain:expr) => (
173 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x;$domain])
174 );
175}