3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-15 13:28:47 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-02 06:38:14 -07:00
parent 78ebe0a94c
commit 57d430b3fd
3 changed files with 11 additions and 11 deletions

View file

@ -1125,7 +1125,7 @@ br_status seq_rewriter::mk_seq_index(expr* a, expr* b, expr* c, expr_ref& result
bool isc2 = m_util.str.is_string(b, s2); bool isc2 = m_util.str.is_string(b, s2);
if (isc1 && isc2 && m_autil.is_numeral(c, r) && r.is_unsigned()) { if (isc1 && isc2 && m_autil.is_numeral(c, r) && r.is_unsigned()) {
int idx = s1.indexof(s2, r.get_unsigned()); int idx = s1.indexofu(s2, r.get_unsigned());
result = m_autil.mk_numeral(rational(idx), true); result = m_autil.mk_numeral(rational(idx), true);
return BR_DONE; return BR_DONE;
} }

View file

@ -280,13 +280,13 @@ bool zstring::contains(zstring const& other) const {
return cont; return cont;
} }
int zstring::indexof(zstring const& other, int offset) const { int zstring::indexofu(zstring const& other, unsigned offset) const {
SASSERT(offset >= 0); if (offset <= length() && other.length() == 0) return offset;
if (static_cast<unsigned>(offset) <= length() && other.length() == 0) return offset; if (offset == length()) return -1;
if (static_cast<unsigned>(offset) == length()) return -1; if (offset < other.length() + offset) return -1;
if (other.length() + offset > length()) return -1; if (other.length() + offset > length()) return -1;
unsigned last = length() - other.length(); unsigned last = length() - other.length();
for (unsigned i = static_cast<unsigned>(offset); i <= last; ++i) { for (unsigned i = offset; i <= last; ++i) {
bool prefix = true; bool prefix = true;
for (unsigned j = 0; prefix && j < other.length(); ++j) { for (unsigned j = 0; prefix && j < other.length(); ++j) {
prefix = m_buffer[i + j] == other[j]; prefix = m_buffer[i + j] == other[j];
@ -313,10 +313,10 @@ int zstring::last_indexof(zstring const& other) const {
return -1; return -1;
} }
zstring zstring::extract(int offset, int len) const { zstring zstring::extract(unsigned offset, unsigned len) const {
zstring result(m_encoding); zstring result(m_encoding);
SASSERT(0 <= offset && 0 <= len); if (offset + len < offset) return result;
int last = std::min(offset+len, static_cast<int>(length())); int last = std::min(offset+len, length());
for (int i = offset; i < last; ++i) { for (int i = offset; i < last; ++i) {
result.m_buffer.push_back(m_buffer[i]); result.m_buffer.push_back(m_buffer[i]);
} }

View file

@ -119,9 +119,9 @@ public:
bool suffixof(zstring const& other) const; bool suffixof(zstring const& other) const;
bool prefixof(zstring const& other) const; bool prefixof(zstring const& other) const;
bool contains(zstring const& other) const; bool contains(zstring const& other) const;
int indexof(zstring const& other, int offset) const; int indexofu(zstring const& other, unsigned offset) const;
int last_indexof(zstring const& other) const; int last_indexof(zstring const& other) const;
zstring extract(int lo, int hi) const; zstring extract(unsigned lo, unsigned hi) const;
zstring operator+(zstring const& other) const; zstring operator+(zstring const& other) const;
bool operator==(const zstring& other) const; bool operator==(const zstring& other) const;
bool operator!=(const zstring& other) const; bool operator!=(const zstring& other) const;