diff options
author | Tim King <taking@google.com> | 2015-12-24 05:38:43 -0500 |
---|---|---|
committer | Tim King <taking@google.com> | 2015-12-24 05:38:43 -0500 |
commit | a39ad6584c1d61e22e72b53c3838f4f675ed2e19 (patch) | |
tree | ed40cb371c41ac285ca2bf41a82254a36134e132 /src/util/cardinality.cpp | |
parent | 87b0fe9ce10d1e5e9ed5a3e7db77f46bf3f68922 (diff) |
Miscellaneous fixes
- Splitting the two instances of CheckArgument. The template version is now always defined in base/exception.h and is available in a cvc4_public header. This version has lost its variadic version (due to swig not supporting va_list's). The CPP macro version has been renamed PrettyCheckArgument. (Taking suggestions for a better name.) This is now only defined in base/cvc4_assert.h. Only use this in cvc4_private headers and in .cpp files that can use cvc4_private headers. To use a variadic version of CheckArguments, outside of this scope, you need to duplicate this macro locally. See cvc3_compat.cpp for an example.
- Making fitsSignedInt() and fitsUnsignedInt() work more robustly for CLN on 32 bit systems.
- Refactoring ArrayStoreAll to avoid potential problems with circular header inclusions.
- Changing some headers to use iosfwd when possible.
Diffstat (limited to 'src/util/cardinality.cpp')
-rw-r--r-- | src/util/cardinality.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/util/cardinality.cpp b/src/util/cardinality.cpp index dfee0aae2..07e094a38 100644 --- a/src/util/cardinality.cpp +++ b/src/util/cardinality.cpp @@ -16,6 +16,9 @@ #include "util/cardinality.h" +#include "base/cvc4_assert.h" + + namespace CVC4 { const Integer Cardinality::s_unknownCard(0); @@ -27,6 +30,45 @@ const Cardinality Cardinality::INTEGERS(CardinalityBeth(0)); const Cardinality Cardinality::REALS(CardinalityBeth(1)); const Cardinality Cardinality::UNKNOWN_CARD((CardinalityUnknown())); +CardinalityBeth::CardinalityBeth(const Integer& beth) + : d_index(beth) +{ + PrettyCheckArgument(beth >= 0, beth, + "Beth index must be a nonnegative integer, not %s.", + beth.toString().c_str()); +} + +Cardinality::Cardinality(long card) + : d_card(card) +{ + PrettyCheckArgument(card >= 0, card, + "Cardinality must be a nonnegative integer, not %ld.", + card); + d_card += 1; +} + +Cardinality::Cardinality(const Integer& card) + : d_card(card) +{ + PrettyCheckArgument(card >= 0, card, + "Cardinality must be a nonnegative integer, not %s.", + card.toString().c_str()); + d_card += 1; +} + + +Integer Cardinality::getFiniteCardinality() const throw(IllegalArgumentException) { + PrettyCheckArgument(isFinite(), *this, "This cardinality is not finite."); + PrettyCheckArgument(!isLargeFinite(), *this, "This cardinality is finite, but too large to represent."); + return d_card - 1; +} + +Integer Cardinality::getBethNumber() const throw(IllegalArgumentException) { + PrettyCheckArgument(!isFinite() && !isUnknown(), *this, + "This cardinality is not infinite (or is unknown)."); + return -d_card - 1; +} + Cardinality& Cardinality::operator+=(const Cardinality& c) throw() { if(isUnknown()) { return *this; |