smats  0.0.1
Satisfability Modulo Arithmetic Theories Symbols
Loading...
Searching...
No Matches
definitions.h
1
7#pragma once
8
20#define GENERIC_ARITHMETIC_OPERATOR_DECLARATION(lhs_type, op, rhs_type) lhs_type operator op(const rhs_type o);
31#define ARITHMETIC_OPERATOR_DECLARATION(type, op) GENERIC_ARITHMETIC_OPERATOR_DECLARATION(type, op, type)
45#define GENERIC_ARITHMETIC_OPERATORS_DECLARATION(lhs_type, rhs_type) \
46 GENERIC_ARITHMETIC_OPERATOR_DECLARATION(lhs_type, +=, rhs_type) \
47 GENERIC_ARITHMETIC_OPERATOR_DECLARATION(lhs_type, -=, rhs_type) \
48 GENERIC_ARITHMETIC_OPERATOR_DECLARATION(lhs_type, *=, rhs_type) \
49 GENERIC_ARITHMETIC_OPERATOR_DECLARATION(lhs_type, /=, rhs_type)
62#define ARITHMETIC_OPERATORS_DECLARATION(type) GENERIC_ARITHMETIC_OPERATORS_DECLARATION(type, type)
78#define GENERIC_ARITHMETIC_OPERATOR_DEFINITION(lhs_type, op, rhs_type) \
79 lhs_type operator op(const rhs_type o) const { \
80 lhs_type temp(*this); \
81 temp op## = o; \
82 return temp; \
83 }
98#define ARITHMETIC_OPERATOR_DEFINITION(type, op) GENERIC_ARITHMETIC_OPERATOR_DEFINITION(type, op, type &)
113#define GENERIC_ARITHMETIC_OPERATORS_DEFINITION(lhs_type, rhs_type) \
114 GENERIC_ARITHMETIC_OPERATOR_DEFINITION(lhs_type, +, rhs_type) \
115 GENERIC_ARITHMETIC_OPERATOR_DEFINITION(lhs_type, -, rhs_type) \
116 GENERIC_ARITHMETIC_OPERATOR_DEFINITION(lhs_type, *, rhs_type) \
117 GENERIC_ARITHMETIC_OPERATOR_DEFINITION(lhs_type, /, rhs_type)
131#define ARITHMETIC_OPERATORS_DEFINITION(type) GENERIC_ARITHMETIC_OPERATORS_DEFINITION(type, type &)
145#define GENERIC_ARITHMETIC_OPERATORS(lhs_type, rhs_type) \
146 GENERIC_ARITHMETIC_OPERATORS_DECLARATION(lhs_type &, rhs_type) \
147 GENERIC_ARITHMETIC_OPERATORS_DEFINITION(lhs_type, rhs_type)
161#define ARITHMETIC_OPERATORS(type) \
162 ARITHMETIC_OPERATORS_DECLARATION(type &) \
163 ARITHMETIC_OPERATORS_DEFINITION(type)
164
175#define EXPLICIT_TEMPLATE_INSTANTIATION(c, t) template class c<t>
176
189#define EXPLICIT_TEMPLATE_INSTANTIATION_NUMERIC(c) \
190 EXPLICIT_TEMPLATE_INSTANTIATION(c, int); \
191 EXPLICIT_TEMPLATE_INSTANTIATION(c, long); \
192 EXPLICIT_TEMPLATE_INSTANTIATION(c, float); \
193 EXPLICIT_TEMPLATE_INSTANTIATION(c, double)
194
205#define EXTERNAL_TEMPLATE_INSTANTIATION(c, t) extern template class c<t>
206
219#define EXTERNAL_TEMPLATE_INSTANTIATION_NUMERIC(c) \
220 EXTERNAL_TEMPLATE_INSTANTIATION(c, int); \
221 EXTERNAL_TEMPLATE_INSTANTIATION(c, long); \
222 EXTERNAL_TEMPLATE_INSTANTIATION(c, float); \
223 EXTERNAL_TEMPLATE_INSTANTIATION(c, double)