]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/string.cc
* The grand 2005-2006 replace.
[lilypond.git] / flower / string.cc
index 5279b6a2d5e7ff6f9f83390aee7b463e926cd33a..4d7fd9019bc096bafb9030334b934743293c158d 100644 (file)
@@ -1,7 +1,7 @@
 /*
   string.cc - implement String
 
-  (c) 1997--2005 Han-Wen Nienhuys & Jan Nieuwenhuizen
+  (c) 1997--2006 Han-Wen Nienhuys & Jan Nieuwenhuizen
 */
 
 #ifndef _GNU_SOURCE // we want memmem
@@ -16,6 +16,7 @@
 #include <cstring>
 
 #include <iostream>
+using namespace std;
 
 #include "libc-extension.hh"
 #include "string-convert.hh"
@@ -131,12 +132,6 @@ String::to_bytes () const
   return strh_.to_bytes ();
 }
 
-char const *
-String::to_str0 () const
-{
-  return strh_.to_str0 ();
-}
-
 Byte *
 String::get_bytes ()
 {
@@ -168,7 +163,7 @@ String::compare (String const &s1, String const &s2)
   /*
     don't forget the terminating '\0'
   */
-  int f = (s1.length () <? s2.length ());
+  int f = min (s1.length (), s2.length ());
   int cmp_length = 1+ f;
   int i = memcmp (p1, p2, cmp_length);
   return i;
@@ -238,8 +233,9 @@ String::index (String searchfor) const
 {
   char const *me = strh_.to_str0 ();
 
-  char const *p = (char const *)
-    memmem (me, length (), searchfor.to_str0 (), searchfor.length ());
+  char const *p
+    = (char const *) memmem (me, length (),
+                            searchfor.to_str0 (), searchfor.length ());
 
   if (p)
     return p - me;
@@ -266,9 +262,7 @@ String::index_any (String set) const
     {
       char *found = (char *) memchr (me, set[i], n);
       if (found)
-       {
-         return found - (char const *)me;
-       }
+       return found - (char const *)me;
     }
   return -1;
 }
@@ -348,7 +342,7 @@ String::to_lower ()
 void
 String::reverse ()
 {
-  strrev (get_bytes (), length ());
+  memrev (get_bytes (), length ());
 }
 
 int
@@ -382,9 +376,26 @@ String::print_on (ostream &os) const
 }
 #endif
 
-void
-String::substitute_char (char chr, String sub)
+String
+String::substitute (String find, String replace)
 {
-  for (int i = index (chr); i > -1; i = index (chr))
-    *this = left_string (i) + sub + right_string (length () - i - 1);
+  int n = find.length ();
+  int m = replace.length ();
+  for (int i = index (find), j = 0; i > -1;
+       i = right_string (length () - j).index (find))
+    {
+      *this = left_string (i + j)
+       + replace
+       + right_string (length () - j - i - n);
+      j += i + m;
+    }
+  return *this;
+}
+
+String
+String::substitute (char find, char replace)
+{
+  for (int i = index (find); i > - 1; i = index (find))
+    (*this)[i] = replace;
+  return *this;
 }