diff options
Diffstat (limited to 'src/util/abstract_value.h')
-rw-r--r-- | src/util/abstract_value.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/util/abstract_value.h b/src/util/abstract_value.h new file mode 100644 index 000000000..1fc2f42e1 --- /dev/null +++ b/src/util/abstract_value.h @@ -0,0 +1,78 @@ +/********************* */ +/*! \file abstract_value.h + ** \verbatim + ** Original author: mdeters + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 prototype. + ** Copyright (c) 2009-2012 The Analysis of Computer Systems Group (ACSys) + ** Courant Institute of Mathematical Sciences + ** New York University + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Representation of abstract values + ** + ** Representation of abstract values. + **/ + +#include "cvc4_public.h" + +#pragma once + +#include "expr/type.h" +#include <iostream> + +namespace CVC4 { + +class CVC4_PUBLIC AbstractValue { + const Integer d_index; + +public: + + AbstractValue(Integer index) throw(IllegalArgumentException) : + d_index(index) { + CheckArgument(index >= 1, index, "index >= 1 required for abstract value, not `%s'", index.toString().c_str()); + } + + ~AbstractValue() throw() { + } + + const Integer& getIndex() const throw() { + return d_index; + } + + bool operator==(const AbstractValue& val) const throw() { + return d_index == val.d_index; + } + bool operator!=(const AbstractValue& val) const throw() { + return !(*this == val); + } + + bool operator<(const AbstractValue& val) const throw() { + return d_index < val.d_index; + } + bool operator<=(const AbstractValue& val) const throw() { + return d_index <= val.d_index; + } + bool operator>(const AbstractValue& val) const throw() { + return !(*this <= val); + } + bool operator>=(const AbstractValue& val) const throw() { + return !(*this < val); + } + +};/* class AbstractValue */ + +std::ostream& operator<<(std::ostream& out, const AbstractValue& val) CVC4_PUBLIC; + +/** + * Hash function for the BitVector constants. + */ +struct CVC4_PUBLIC AbstractValueHashFunction { + inline size_t operator()(const AbstractValue& val) const { + return IntegerHashFunction()(val.getIndex()); + } +};/* struct AbstractValueHashFunction */ + +}/* CVC4 namespace */ |