conjure_cp_core/ast/
mod.rs1pub mod abstract_comprehension;
2pub mod ac_operators;
3mod atom;
4pub mod categories;
5mod cnf_clause;
6pub mod comprehension;
7pub mod declaration;
8mod domains;
9pub mod eval;
10mod expressions;
11mod literals;
12pub mod matrix;
13mod metadata;
14mod model;
15mod name;
16pub mod pretty;
17pub mod records;
18mod reference;
19mod sat_encoding;
20pub mod serde;
21mod submodel;
22mod symbol_table;
23mod types;
24mod variables;
25
26mod moo;
27mod partial_eval;
28
29pub use atom::Atom;
30pub use cnf_clause::CnfClause;
31pub use declaration::{DeclarationKind, DeclarationPtr};
32pub use domains::{
33 Domain, DomainOpError, DomainPtr, FuncAttr, GroundDomain, HasDomain, IntVal, JectivityAttr,
34 MSetAttr, PartialityAttr, Range, RecordEntry, RecordEntryGround, SetAttr, UnresolvedDomain,
35};
36pub use eval::eval_constant;
37pub use expressions::Expression;
38pub use literals::AbstractLiteral;
39pub use literals::Literal;
40pub use metadata::Metadata;
41pub use model::*;
42pub use moo::Moo;
43pub use name::Name;
44pub use partial_eval::run_partial_evaluator;
45pub use reference::Reference;
46pub use sat_encoding::SATIntEncoding;
47pub use submodel::SubModel;
48pub use symbol_table::{SymbolTable, SymbolTablePtr};
49pub use types::*;
50pub use variables::DecisionVariable;
51
52#[macro_export]
59macro_rules! matrix {
60 () => (
62 $crate::into_matrix![]
63 );
64
65 (;$domain:expr) => (
66 $crate::into_matrix![;$domain]
67 );
68
69 ($x:expr) => (
70 $crate::into_matrix![std::vec![$x]]
71 );
72
73 ($x:expr;$domain:expr) => (
74 $crate::into_matrix![std::vec![$x];$domain]
75 );
76
77 ($($x:expr),*) => (
78 $crate::into_matrix![std::vec![$($x),*]]
79 );
80
81 ($($x:expr),*;$domain:expr) => (
82 $crate::into_matrix![std::vec![$($x),*];$domain]
83 );
84
85 ($($x:expr,)*) => (
86 $crate::into_matrix![std::vec![$($x),*]]
87 );
88
89 ($($x:expr,)*;$domain:expr) => (
90 $crate::into_matrix![std::vec![$($x),*];$domain]
91 )
92}
93
94#[macro_export]
101macro_rules! into_matrix {
102 () => (
103 $crate::into_matrix![std::vec::Vec::new()]
104 );
105
106 (;$domain:expr) => (
107 $crate::into_matrix![std::vec::Vec::new();$domain]
108 );
109 ($x:expr) => (
110 $crate::ast::AbstractLiteral::matrix_implied_indices($x)
111 );
112 ($x:expr;$domain:expr) => (
113 $crate::ast::AbstractLiteral::Matrix($x,$domain)
114 );
115}
116
117#[macro_export]
123macro_rules! matrix_expr {
124 () => (
125 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![])
126 );
127
128 (;$domain:expr) => (
129 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
130 );
131
132
133 ($x:expr) => (
134 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$x])
135 );
136 ($x:expr;$domain:expr) => (
137 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
138 );
139
140 ($($x:expr),+) => (
141 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
142 );
143
144 ($($x:expr),+;$domain:expr) => (
145 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
146 );
147
148 ($($x:expr,)+) => (
149 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
150 );
151
152 ($($x:expr,)+;$domain:expr) => (
153 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
154 )
155}
156
157#[macro_export]
164macro_rules! into_matrix_expr {
165 () => (
166 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![])
167 );
168
169 (;$domain:expr) => (
170 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![;$domain])
171 );
172 ($x:expr) => (
173 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x])
174 );
175 ($x:expr;$domain:expr) => (
176 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x;$domain])
177 );
178}