summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorTianyi Liang <tianyi-liang@uiowa.edu>2014-01-09 16:23:59 -0600
committerTianyi Liang <tianyi-liang@uiowa.edu>2014-01-09 16:24:43 -0600
commit12dae128053342fef8af2f560fd98e1ab6a71cca (patch)
tree96d854b38d819affe72d551aee70315821e21e57 /src/util
parent780448ae48ed8755b11570a6843ab6871d94abef (diff)
add constant replace, indexof
Diffstat (limited to 'src/util')
-rw-r--r--src/util/regexp.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/util/regexp.h b/src/util/regexp.h
index 3f9df6aaf..f6c5b2b0f 100644
--- a/src/util/regexp.h
+++ b/src/util/regexp.h
@@ -183,11 +183,12 @@ public:
return true;
}
- std::size_t find(const String &y) const {
- if(y.d_str.size() == 0) return 0;
+ 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;
if(d_str.size() == 0) return std::string::npos;
std::size_t ret = std::string::npos;
- for(int i = 0; i <= (int) d_str.size() - (int) y.d_str.size(); i++) {
+ for(int i = start; i <= (int) d_str.size() - (int) 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++) {
@@ -202,6 +203,19 @@ public:
return ret;
}
+ String replace(const String &s, const String &t) const {
+ std::size_t ret = find(s);
+ if( ret != std::string::npos ) {
+ std::vector<unsigned int> vec;
+ vec.insert(vec.begin(), d_str.begin(), d_str.begin() + ret);
+ vec.insert(vec.end(), t.d_str.begin(), t.d_str.end());
+ vec.insert(vec.end(), d_str.begin() + ret + s.d_str.size(), d_str.end());
+ return String(vec);
+ } else {
+ return *this;
+ }
+ }
+
String substr(unsigned i) const {
std::vector<unsigned int> ret_vec;
std::vector<unsigned int>::const_iterator itr = d_str.begin() + i;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback