From 58e47f72906773748183a141f314a21f5b970b0b Mon Sep 17 00:00:00 2001 From: Tianyi Liang Date: Tue, 21 Oct 2014 23:10:35 -0500 Subject: Fixed bug 589 --- src/util/regexp.h | 57 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 17 deletions(-) (limited to 'src/util/regexp.h') diff --git a/src/util/regexp.h b/src/util/regexp.h index e75ca1fad..2b7bfa303 100644 --- a/src/util/regexp.h +++ b/src/util/regexp.h @@ -24,8 +24,9 @@ #include #include #include -#include "util/exception.h" +#include //#include "util/integer.h" +#include "util/exception.h" #include "util/hash.h" namespace CVC4 { @@ -65,7 +66,7 @@ private: } else if (c >= 'a' && c <= 'f') { return c - 'a' + 10; } else { - //Assert(c >= 'A' && c <= 'F'); + assert(c >= 'A' && c <= 'F'); return c - 'A' + 10; } } @@ -151,14 +152,34 @@ public: } } - bool strncmp(const String &y, unsigned int n) const { - for(unsigned int i=0; i= y.d_str.size()) ? d_str.size() : y.d_str.size(); + std::size_t s = (d_str.size() <= y.d_str.size()) ? d_str.size() : y.d_str.size(); + if(n > s) { + if(b == s) { + n = s; + } else { + return false; + } + } + for(std::size_t i=0; i= y.d_str.size()) ? d_str.size() : y.d_str.size(); + std::size_t s = (d_str.size() <= y.d_str.size()) ? d_str.size() : y.d_str.size(); + if(n > s) { + if(b == s) { + n = s; + } else { + return false; + } + } + for(std::size_t i=0; i= 0); + unsigned int operator[] (const std::size_t i) const { + assert( i < d_str.size() ); return d_str[i]; } /* @@ -208,19 +229,19 @@ public: return true; } - std::size_t find(const String &y, const int start = 0) const { - if(d_str.size() < y.d_str.size() + (std::size_t) start) return std::string::npos; - if(y.d_str.size() == 0) return (std::size_t) start; + std::size_t find(const String &y, const std::size_t start = 0) const { + if(d_str.size() < y.d_str.size() + start) return std::string::npos; + if(y.d_str.size() == 0) return start; if(d_str.size() == 0) return std::string::npos; std::size_t ret = std::string::npos; - for(int i = start; i <= (int) d_str.size() - (int) y.d_str.size(); i++) { + for(std::size_t i = start; i <= d_str.size() - y.d_str.size(); i++) { if(d_str[i] == y.d_str[0]) { std::size_t j=0; for(; j ret_vec; std::vector::const_iterator itr = d_str.begin() + i; ret_vec.insert(ret_vec.end(), itr, d_str.end()); return String(ret_vec); } - String substr(unsigned i, unsigned j) const { + String substr(std::size_t i, std::size_t j) const { + assert(i+j <= d_str.size()); std::vector ret_vec; std::vector::const_iterator itr = d_str.begin() + i; ret_vec.insert( ret_vec.end(), itr, itr + j ); return String(ret_vec); } - String prefix(unsigned i) const { + String prefix(std::size_t i) const { return substr(0, i); } - String suffix(unsigned i) const { + String suffix(std::size_t i) const { return substr(d_str.size() - i, i); } std::size_t overlap(String &y) const; -- cgit v1.2.3