return *d_node < *e.d_node;
}
+bool Expr::operator>(const Expr& e) const {
+ Assert(d_node != NULL, "Unexpected NULL expression pointer!");
+ Assert(e.d_node != NULL, "Unexpected NULL expression pointer!");
+ if(isNull() && !e.isNull()) {
+ return true;
+ }
+ ExprManagerScope ems(*this);
+ return *d_node > *e.d_node;
+}
+
Kind Expr::getKind() const {
ExprManagerScope ems(*this);
Assert(d_node != NULL, "Unexpected NULL expression pointer!");
*/
bool operator<(const Expr& e) const;
+ /**
+ * Order comparison operator. The only invariant on the order of expressions
+ * is that the expressions that were created sooner will be smaller in the
+ * ordering than all the expressions created later. Null expression is the
+ * smallest element of the ordering. The behavior of the operator is
+ * undefined if the expressions come from two different expression managers.
+ * @param e the expression to compare to
+ * @return true if this expression is greater than the given one
+ */
+ bool operator>(const Expr& e) const;
+
+ /**
+ * Order comparison operator. The only invariant on the order of expressions
+ * is that the expressions that were created sooner will be smaller in the
+ * ordering than all the expressions created later. Null expression is the
+ * smallest element of the ordering. The behavior of the operator is
+ * undefined if the expressions come from two different expression managers.
+ * @param e the expression to compare to
+ * @return true if this expression is smaller or equal to the given one
+ */
+ bool operator<=(const Expr& e) const { return !(*this > e); }
+
+ /**
+ * Order comparison operator. The only invariant on the order of expressions
+ * is that the expressions that were created sooner will be smaller in the
+ * ordering than all the expressions created later. Null expression is the
+ * smallest element of the ordering. The behavior of the operator is
+ * undefined if the expressions come from two different expression managers.
+ * @param e the expression to compare to
+ * @return true if this expression is greater or equal to the given one
+ */
+ bool operator>=(const Expr& e) const { return !(*this < e); }
+
/**
* Returns the kind of the expression (AND, PLUS ...).
* @return the kind of the expression
return d_nv->d_id < node.d_nv->d_id;
}
+ /**
+ * We compare by expression ids so, keeping things deterministic and having
+ * that subexpressions have to be smaller than the enclosing expressions.
+ * @param node the node to compare to
+ * @return true if this expression is greater
+ */
+ template <bool ref_count_1>
+ inline bool operator>(const NodeTemplate<ref_count_1>& node) const {
+ return d_nv->d_id > node.d_nv->d_id;
+ }
+
+ /**
+ * We compare by expression ids so, keeping things deterministic and having
+ * that subexpressions have to be smaller than the enclosing expressions.
+ * @param node the node to compare to
+ * @return true if this expression is smaller than or equal to
+ */
+ template <bool ref_count_1>
+ inline bool operator<=(const NodeTemplate<ref_count_1>& node) const {
+ return d_nv->d_id <= node.d_nv->d_id;
+ }
+
+ /**
+ * We compare by expression ids so, keeping things deterministic and having
+ * that subexpressions have to be smaller than the enclosing expressions.
+ * @param node the node to compare to
+ * @return true if this expression is greater than or equal to
+ */
+ template <bool ref_count_1>
+ inline bool operator>=(const NodeTemplate<ref_count_1>& node) const {
+ return d_nv->d_id >= node.d_nv->d_id;
+ }
+
/**
* Returns the i-th child of this node.
* @param i the index of the child