diff options
author | Tianyi Liang <tianyi-liang@uiowa.edu> | 2015-01-08 11:37:58 -0600 |
---|---|---|
committer | Tianyi Liang <tianyi-liang@uiowa.edu> | 2015-01-08 11:37:58 -0600 |
commit | 0f03904f2fbe4f785c697dc301f48f55919896cd (patch) | |
tree | c9ae16e6761ac0592d9520a94f7dbf037e3fe2d5 /src/util | |
parent | 740bfad6ab2c3ac6c1f7eec9c8e6f5338abd8eb5 (diff) |
switch ascii encoding to unsigned char
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/regexp.cpp | 10 | ||||
-rw-r--r-- | src/util/regexp.h | 59 |
2 files changed, 37 insertions, 32 deletions
diff --git a/src/util/regexp.cpp b/src/util/regexp.cpp index 1c672d4b9..24e894678 100644 --- a/src/util/regexp.cpp +++ b/src/util/regexp.cpp @@ -60,14 +60,14 @@ void String::toInternal(const std::string &s) { num = num * 8 + (int)s[i+1] - (int)'0'; if(flag && i+2 < s.size() && isdigit(s[i+2]) && s[i+2] < '8') { num = num * 8 + (int)s[i+2] - (int)'0'; - d_str.push_back( convertCharToUnsignedInt((char)num) ); + d_str.push_back( convertCharToUnsignedInt((unsigned char)num) ); i += 3; } else { - d_str.push_back( convertCharToUnsignedInt((char)num) ); + d_str.push_back( convertCharToUnsignedInt((unsigned char)num) ); i += 2; } } else { - d_str.push_back( convertCharToUnsignedInt((char)num) ); + d_str.push_back( convertCharToUnsignedInt((unsigned char)num) ); i++; } } else if((unsigned)s[i] > 127) { @@ -91,7 +91,7 @@ void String::toInternal(const std::string &s) { } } -void String::getCharSet(std::set<char> &cset) const { +void String::getCharSet(std::set<unsigned char> &cset) const { for(std::vector<unsigned int>::const_iterator itr = d_str.begin(); itr != d_str.end(); itr++) { cset.insert( convertUnsignedIntToChar(*itr) ); @@ -113,7 +113,7 @@ std::size_t String::overlap(String &y) const { std::string String::toString() const { std::string str; for(unsigned int i=0; i<d_str.size(); ++i) { - char c = convertUnsignedIntToChar( d_str[i] ); + unsigned char c = convertUnsignedIntToChar( d_str[i] ); if(isprint( c )) { if(c == '\\') { str += "\\\\"; diff --git a/src/util/regexp.h b/src/util/regexp.h index 26d468a30..c5a094f8c 100644 --- a/src/util/regexp.h +++ b/src/util/regexp.h @@ -33,35 +33,36 @@ namespace CVC4 { class CVC4_PUBLIC String { public: - static unsigned int convertCharToUnsignedInt( char c ) { - int i = (int)c; - i = i-65; - return (unsigned int)(i<0 ? i+256 : i); + static unsigned convertCharToUnsignedInt( unsigned char c ) { + unsigned i = c; + i = i + 191; + return (i>=256 ? i-256 : i); } - static char convertUnsignedIntToChar( unsigned int i ){ - int ii = i+65; - return (char)(ii>=256 ? ii-256 : ii); + static unsigned char convertUnsignedIntToChar( unsigned i ){ + unsigned ii = i+65; + return (unsigned char)(ii>=256 ? ii-256 : ii); } - static bool isPrintable( unsigned int i ){ - char c = convertUnsignedIntToChar( i ); - return isprint( (int)c ); + static bool isPrintable( unsigned i ){ + unsigned char c = convertUnsignedIntToChar( i ); + return (c>=' ' && c<='~');//isprint( (int)c ); } private: - std::vector<unsigned int> d_str; + std::vector<unsigned> d_str; - bool isVecSame(const std::vector<unsigned int> &a, const std::vector<unsigned int> &b) const { + bool isVecSame(const std::vector<unsigned> &a, const std::vector<unsigned> &b) const { if(a.size() != b.size()) return false; else { - for(unsigned int i=0; i<a.size(); ++i) - if(a[i] != b[i]) return false; - return true; + return std::equal(a.begin(), a.end(), b.begin()); + //for(unsigned int i=0; i<a.size(); ++i) + //if(a[i] != b[i]) return false; + //return true; } } //guarded - char hexToDec(char c) { - if(isdigit(c)) { + unsigned char hexToDec(unsigned char c) { + if(c>='0' && c<='9') { return c - '0'; } else if (c >= 'a' && c <= 'f') { return c - 'a' + 10; @@ -85,11 +86,11 @@ public: toInternal(stmp); } - String(const char c) { + String(const unsigned char c) { d_str.push_back( convertCharToUnsignedInt(c) ); } - String(const std::vector<unsigned int> &s) : d_str(s) { } + String(const std::vector<unsigned> &s) : d_str(s) { } ~String() {} @@ -197,15 +198,15 @@ public: */ std::string toString() const; - unsigned size() const { + std::size_t size() const { return d_str.size(); } - char getFirstChar() const { + unsigned char getFirstChar() const { return convertUnsignedIntToChar( d_str[0] ); } - char getLastChar() const { + unsigned char getLastChar() const { assert(d_str.size() != 0); return convertUnsignedIntToChar( d_str[d_str.size() - 1] ); } @@ -239,7 +240,7 @@ public: 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(std::size_t i = start; i <= d_str.size() - 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<y.d_str.size(); j++) { @@ -250,6 +251,10 @@ public: break; } } + }*/ + std::vector<unsigned>::const_iterator itr = std::search(d_str.begin(), d_str.end(), y.d_str.begin(), y.d_str.end()); + if(itr != d_str.end()) { + ret = itr - d_str.begin(); } return ret; } @@ -293,7 +298,7 @@ public: bool isNumber() const { if(d_str.size() == 0) return false; for(unsigned int i=0; i<d_str.size(); ++i) { - char c = convertUnsignedIntToChar( d_str[i] ); + unsigned char c = convertUnsignedIntToChar( d_str[i] ); if(c<'0' || c>'9') { return false; } @@ -304,7 +309,7 @@ public: if(isNumber()) { int ret=0; for(unsigned int i=0; i<d_str.size(); ++i) { - char c = convertUnsignedIntToChar( d_str[i] ); + unsigned char c = convertUnsignedIntToChar( d_str[i] ); ret = ret * 10 + (int)c - (int)'0'; } return ret; @@ -313,9 +318,9 @@ public: } } - void getCharSet(std::set<char> &cset) const; + void getCharSet(std::set<unsigned char> &cset) const; - std::vector<unsigned int> getVec() const { + std::vector<unsigned> getVec() const { return d_str; } };/* class String */ |