mirror of
https://github.com/Z3Prover/z3
synced 2025-06-20 04:43:39 +00:00
implementing last-index-of #2089
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
62ec02e50f
commit
3c8fd83c97
10 changed files with 174 additions and 31 deletions
|
@ -148,6 +148,7 @@ extern "C" {
|
|||
MK_BINARY(Z3_mk_seq_nth, mk_c(c)->get_seq_fid(), OP_SEQ_AT, SKIP);
|
||||
MK_UNARY(Z3_mk_seq_length, mk_c(c)->get_seq_fid(), OP_SEQ_LENGTH, SKIP);
|
||||
MK_TERNARY(Z3_mk_seq_index, mk_c(c)->get_seq_fid(), OP_SEQ_INDEX, SKIP);
|
||||
MK_BINARY(Z3_mk_seq_last_index, mk_c(c)->get_seq_fid(), OP_SEQ_LAST_INDEX, SKIP);
|
||||
MK_UNARY(Z3_mk_seq_to_re, mk_c(c)->get_seq_fid(), OP_SEQ_TO_RE, SKIP);
|
||||
MK_BINARY(Z3_mk_seq_in_re, mk_c(c)->get_seq_fid(), OP_SEQ_IN_RE, SKIP);
|
||||
|
||||
|
|
|
@ -3276,6 +3276,12 @@ namespace z3 {
|
|||
s.check_error();
|
||||
return expr(s.ctx(), r);
|
||||
}
|
||||
inline expr last_indexof(expr const& s, expr const& substr) {
|
||||
check_context(s, substr);
|
||||
Z3_ast r = Z3_mk_seq_last_index(s.ctx(), s, substr);
|
||||
s.check_error();
|
||||
return expr(s.ctx(), r);
|
||||
}
|
||||
inline expr to_re(expr const& s) {
|
||||
MK_EXPR1(Z3_mk_seq_to_re, s);
|
||||
}
|
||||
|
|
|
@ -10154,6 +10154,15 @@ def IndexOf(s, substr, offset):
|
|||
offset = IntVal(offset, ctx)
|
||||
return ArithRef(Z3_mk_seq_index(s.ctx_ref(), s.as_ast(), substr.as_ast(), offset.as_ast()), s.ctx)
|
||||
|
||||
def LastIndexOf(s, substr):
|
||||
"""Retrieve the last index of substring within a string"""
|
||||
ctx = None
|
||||
ctx = _get_ctx2(s, substr, ctx)
|
||||
s = _coerce_seq(s, ctx)
|
||||
substr = _coerce_seq(substr, ctx)
|
||||
return ArithRef(Z3_mk_seq_last_index(s.ctx_ref(), s.as_ast(), substr.as_ast()), s.ctx)
|
||||
|
||||
|
||||
def Length(s):
|
||||
"""Obtain the length of a sequence 's'
|
||||
>>> l = Length(StringVal("abc"))
|
||||
|
|
|
@ -1171,6 +1171,7 @@ typedef enum {
|
|||
Z3_OP_SEQ_NTH,
|
||||
Z3_OP_SEQ_LENGTH,
|
||||
Z3_OP_SEQ_INDEX,
|
||||
Z3_OP_SEQ_LAST_INDEX,
|
||||
Z3_OP_SEQ_TO_RE,
|
||||
Z3_OP_SEQ_IN_RE,
|
||||
|
||||
|
@ -3446,12 +3447,19 @@ extern "C" {
|
|||
/**
|
||||
\brief Return index of first occurrence of \c substr in \c s starting from offset \c offset.
|
||||
If \c s does not contain \c substr, then the value is -1, if \c offset is the length of \c s, then the value is -1 as well.
|
||||
The function is under-specified if \c offset is negative or larger than the length of \c s.
|
||||
The value is -1 if \c offset is negative or larger than the length of \c s.
|
||||
|
||||
def_API('Z3_mk_seq_index' ,AST ,(_in(CONTEXT), _in(AST), _in(AST), _in(AST)))
|
||||
*/
|
||||
Z3_ast Z3_API Z3_mk_seq_index(Z3_context c, Z3_ast s, Z3_ast substr, Z3_ast offset);
|
||||
|
||||
/**
|
||||
\brief Return the last occurrence of \c substr in \c s.
|
||||
If \c s does not contain \c substr, then the value is -1,
|
||||
def_API('Z3_mk_seq_last_index', AST, (_in(CONTEXT), _in(AST), _in(AST)))
|
||||
*/
|
||||
Z3_ast Z3_API Z3_mk_seq_last_index(Z3_context c, Z3_ast, Z3_ast substr);
|
||||
|
||||
/**
|
||||
\brief Convert string to integer.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue