mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Merge branch 'master' of https://github.com/Z3Prover/z3
This commit is contained in:
		
						commit
						a020b13f10
					
				
					 1 changed files with 46 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -876,7 +876,7 @@ namespace z3 {
 | 
			
		|||
        unsigned lo() const { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 1)); }
 | 
			
		||||
        unsigned hi() const { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 0)); }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
		/**
 | 
			
		||||
           \brief sequence and regular expression operations.
 | 
			
		||||
           + is overloaeded as sequence concatenation and regular expression union.
 | 
			
		||||
           concat is overloaded to handle sequences and regular expressions
 | 
			
		||||
| 
						 | 
				
			
			@ -1275,6 +1275,51 @@ namespace z3 {
 | 
			
		|||
    inline expr udiv(expr const & a, int b) { return udiv(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
    inline expr udiv(int a, expr const & b) { return udiv(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
		\brief signed reminder operator for bitvectors
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr srem(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvsrem(a.ctx(), a, b)); }
 | 
			
		||||
	inline expr srem(expr const & a, int b) { return srem(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
	inline expr srem(int a, expr const & b) { return srem(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief unsigned reminder operator for bitvectors
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr urem(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvurem(a.ctx(), a, b)); }
 | 
			
		||||
	inline expr urem(expr const & a, int b) { return urem(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
	inline expr urem(int a, expr const & b) { return urem(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief shift left operator for bitvectors
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr shl(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvshl(a.ctx(), a, b)); }
 | 
			
		||||
	inline expr shl(expr const & a, int b) { return shl(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
	inline expr shl(int a, expr const & b) { return shl(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief logic shift right operator for bitvectors
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr lshr(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvlshr(a.ctx(), a, b)); }
 | 
			
		||||
	inline expr lshr(expr const & a, int b) { return lshr(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
	inline expr lshr(int a, expr const & b) { return lshr(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief arithmetic shift right operator for bitvectors
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr ashr(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvashr(a.ctx(), a, b)); }
 | 
			
		||||
	inline expr ashr(expr const & a, int b) { return ashr(a, a.ctx().num_val(b, a.get_sort())); }
 | 
			
		||||
	inline expr ashr(int a, expr const & b) { return ashr(b.ctx().num_val(a, b.get_sort()), b); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief Extend the given bit-vector with zeros to the (unsigned) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr zext(expr const & a, unsigned i) { return to_expr(a.ctx(), Z3_mk_zero_ext(a.ctx(), i, a)); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	\brief Sign-extend of the given bit-vector to the (signed) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
 | 
			
		||||
	*/
 | 
			
		||||
	inline expr sext(expr const & a, unsigned i) { return to_expr(a.ctx(), Z3_mk_sign_ext(a.ctx(), i, a)); }
 | 
			
		||||
 | 
			
		||||
    template<typename T> class cast_ast;
 | 
			
		||||
 | 
			
		||||
    template<> class cast_ast<ast> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue