]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/string-convert.cc
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / flower / string-convert.cc
index bb293f062dc4e5e67f27d6bf56c3860bc8741b87..e3e8bc824da7e3cc4b93937b093d07f04672d603 100644 (file)
@@ -2,16 +2,17 @@
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
---*/
+  --*/
 
 
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include "libc-extension.hh"
-#include "string.hh"
 #include "string-convert.hh"
 #include "string-convert.hh"
+
+#include <cstring>
+#include <cstdio>
+using namespace std;
+
+#include "libc-extension.hh"
 #include "rational.hh"
 #include "rational.hh"
-#include "array.hh"
+#include "std-vector.hh"
 
 /**
    A safe length for stringconversion buffers.
 
 /**
    A safe length for stringconversion buffers.
    2e318, this number would have approx 318 zero's in its string.
 
    Should enlarge buff dynamically.
    2e318, this number would have approx 318 zero's in its string.
 
    Should enlarge buff dynamically.
-   
+
    @see
    man 3 snprintf
    @see
    man 3 snprintf
-   */
+*/
+static const int STRING_BUFFER_LEN = 1024;
 
 
-// hmm, this is shorter even than PATH_MAX
-static const int STRING_BUFFER_LEN=1024;
+string
+String_convert::bool_string (bool b)
+{
+  return string (b ? "true" : "false");
+}
 
 
-String
-String_convert::bool_str (bool b)
+string
+String_convert::bin2hex (Byte bin_char)
 {
 {
-  return String (b ? "true" : "false");
+  string str;
+  str += ::to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
+  str += ::to_string ((char) nibble2hex_byte (bin_char++));
+  return str;
 }
 
 }
 
-String
-String_convert::bin2hex_str (String bin_str)
+string
+String_convert::bin2hex (const string &bin_string)
 {
 {
-  String str;
-  Byte const* byte_C = bin_str.byte_C();
-  for (int i = 0; i < bin_str.length_i(); i++) 
+  string str;
+  Byte const *byte = (Byte const *)bin_string.data ();
+  for (ssize i = 0; i < bin_string.length (); i++)
     {
     {
-      str += to_str ((char)nibble2hex_byte (*byte_C >> 4));
-      str += to_str ((char)nibble2hex_byte (*byte_C++));
+      str += ::to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
+      str += ::to_string ((char)nibble2hex_byte (*byte++));
     }
   return str;
 }
 
 int
     }
   return str;
 }
 
 int
-String_convert::bin2_i (String bin_str)
+String_convert::bin2int (const string &bin_string)
 {
 {
-  return bin2_u (bin_str);
+  return bin2unsigned (bin_string);
 }
 
 unsigned
 }
 
 unsigned
-String_convert::bin2_u (String bin_str)
+String_convert::bin2unsigned (const string &bin_string)
 {
 {
-  assert (bin_str.length_i() <= (int)sizeof(unsigned));
+  assert (bin_string.length () <= (int)sizeof (unsigned));
 
   unsigned result_u = 0;
 
   unsigned result_u = 0;
-  for (int i = 0; i < bin_str.length_i(); i++) 
+  for (ssize i = 0; i < bin_string.length (); i++)
     {
       result_u <<= 8;
     {
       result_u <<= 8;
-      result_u += (Byte)bin_str[ i ];
+      result_u += (Byte)bin_string[ i ];
     }
   return result_u;
 }
 
     }
   return result_u;
 }
 
-// breendet imp from String
 int
 int
-String_convert::dec2_i (String dec_str)
+String_convert::dec2int (const string &dec_string)
 {
 {
-  if (!dec_str.length_i())
+  if (!dec_string.length ())
     return 0;
 
   long l = 0;
     return 0;
 
   long l = 0;
-  int conv = sscanf (dec_str.ch_C(), "%ld", &l);
-  assert (conv);
+  if (!sscanf (dec_string.c_str (), "%ld", &l))
+    assert (false);
 
   return (int)l;
 }
 
 
   return (int)l;
 }
 
-String
-String_convert::i64_str (I64 i64, char const* fmt)
+string
+String_convert::i64_string (I64 i64, char const *fmt)
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
-           (fmt ? fmt : "%Ld"), i64);     // assume radix 10
-  return String (buffer);
-
+            (fmt ? fmt : "%Ld"), i64); // assume radix 10
+  return string (buffer);
 }
 }
-// breendet imp from String
+// breendet imp from string
 double
 double
-String_convert::dec2_f (String dec_str)
+String_convert::dec2double (const string &dec_string)
 {
 {
-  if (!dec_str.length_i())
+  if (!dec_string.length ())
     return 0;
     return 0;
-  double d = 0;
-  int conv = sscanf (dec_str.ch_C(), "%lf", &d);
-  assert (conv);
+
+  double d = 0.0;
+  if (!sscanf (dec_string.c_str (), "%lf", &d))
+    assert (false);
+
   return d;
 }
 
 int
   return d;
 }
 
 int
-String_convert::hex2bin_i (String hex_str, String& bin_str_r)
+String_convert::hex2bin (string hex_string, string &bin_string_r)
 {
 {
-  if (hex_str.length_i() % 2)
-    hex_str = "0" + hex_str;
+  if (hex_string.length () % 2)
+    hex_string = "0" + hex_string;
 
 
-  bin_str_r = "";
-  Byte const* byte_C= hex_str.byte_C();
-  int i = 0;
-  while (i < hex_str.length_i()) 
+  bin_string_r = "";
+  Byte const *byte = (Byte const *) hex_string.data ();
+  ssize i = 0;
+  while (i < hex_string.length ())
     {
     {
-      int high_i = hex2nibble_i (*byte_C++);
-      int low_i = hex2nibble_i (*byte_C++);
+      int high_i = hex2nibble (*byte++);
+      int low_i = hex2nibble (*byte++);
       if (high_i < 0 || low_i < 0)
       if (high_i < 0 || low_i < 0)
-       return 1; // illegal char
-      bin_str_r += to_str ((char)(high_i << 4 | low_i), 1 );
+        return 1; // invalid char
+      bin_string_r += ::to_string ((char) (high_i << 4 | low_i), 1);
       i += 2;
     }
   return 0;
 }
 
       i += 2;
     }
   return 0;
 }
 
-String 
-String_convert::hex2bin_str (String hex_str)
+string
+String_convert::hex2bin (const string &hex_string)
 {
 {
-  String str;
-  //  silly, asserts should alway be "on"!
-  //    assert (!hex2bin_i (hex_str, str) );
-  int error_i = hex2bin_i (hex_str, str);
-  assert (!error_i);
+  string str;
+
+  if (hex2bin (hex_string, str))
+    assert (false);
+
   return str;
 }
 
   return str;
 }
 
-int 
-String_convert::hex2nibble_i (Byte byte)
+int
+String_convert::hex2nibble (Byte byte)
 {
   if (byte >= '0' && byte <= '9')
     return byte - '0';
 {
   if (byte >= '0' && byte <= '9')
     return byte - '0';
@@ -146,193 +154,221 @@ String_convert::hex2nibble_i (Byte byte)
   return -1;
 }
 
   return -1;
 }
 
-// stupido.  Should use int_str()
-String 
-String_convert::i2dec_str (int i, int length_i, char ch)
+// stupido.  Should use int_string ()
+string
+String_convert::int2dec (int i, size_t length_i, char ch)
 {
 {
-  char fill_ch = ch;
-  if (fill_ch)
-    fill_ch = '0';
+  char fill_char = ch;
+  if (fill_char)
+    fill_char = '0';
 
   // ugh
 
   // ugh
-  String dec_str = to_str (i);
-  
+  string dec_string = ::to_string (i);
+
   // ugh
   // ugh
-  return to_str (fill_ch, length_i - dec_str.length_i()) + dec_str;
+  return ::to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
 }
 
 }
 
-
-// stupido.  Should use int_str()
-String 
-String_convert::u2hex_str (unsigned u, int length_i, char fill_ch)
+// stupido.  Should use int_string ()
+string
+String_convert::unsigned2hex (unsigned u, size_t length, char fill_char)
 {
 {
-  String str;
+  string str;
   if (!u)
     str = "0";
 
 #if 1 // both go...
   if (!u)
     str = "0";
 
 #if 1 // both go...
-  while (u) 
+  while (u)
     {
     {
-      str = to_str ((char)((u % 16)["0123456789abcdef"] ) ) + str;
+      str = ::to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
       u /= 16;
     }
 #else
       u /= 16;
     }
 #else
-  str += int_str (u, "%x");    // hmm. %lx vs. %x -> portability?
+  str += int_string (u, "%x");  // hmm. %lx vs. %x -> portability?
 #endif
 
 #endif
 
-  str = to_str (fill_ch, length_i - str.length_i()) + str;
-  while ((str.length_i() > length_i) &&  (str[ 0 ] == 'f' ) )
-    str = str.cut_str (2, INT_MAX);
+  str = ::to_string (fill_char, ssize_t (length - str.length ())) + str;
+  while ((str.length () > length) && (str[ 0 ] == 'f'))
+    str = str.substr (2);
 
   return str;
 }
 
 
   return str;
 }
 
-String 
-String_convert::i2hex_str (int i, int length_i, char fill_ch)
+string
+String_convert::int2hex (int i, size_t length_i, char fill_char)
 {
 {
-  return u2hex_str ((unsigned)i, length_i, fill_ch);
+  return unsigned2hex ((unsigned)i, length_i, fill_char);
 }
 
 Byte
 String_convert::nibble2hex_byte (Byte byte)
 {
 }
 
 Byte
 String_convert::nibble2hex_byte (Byte byte)
 {
-  if ((byte & 0x0f) <= 9 )
-    return (byte & 0x0f) + '0';
+  if ((byte & 0x0f) <= 9)
+    return (Byte) ((byte & 0x0f) + '0');
   else
   else
-    return (byte & 0x0f) - 10 + 'a';
+    return (Byte) ((byte & 0x0f) - 10 + 'a');
 }
 /**
 }
 /**
-  Convert an integer to a string
+   Convert an integer to a string
 
 
-  @param
-  #fmt# is a printf style format, default assumes "%d" as format. 
-  */
-String
-String_convert::int_str (int i, char const* fmt)
+   @param
+   #fmt# is a printf style format, default assumes "%d" as format.
+*/
+string
+String_convert::int_string (int i, char const *fmt)
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
-           (fmt ? fmt : "%d"), i);     // assume radix 10
-  return String (buffer);
+            (fmt ? fmt : "%d"), i); // assume radix 10
+  return string (buffer);
 }
 
 }
 
-String
-String_convert::form_str (char const* format, ...)
+string
+String_convert::form_string (char const *format, ...)
 {
   va_list args;
   va_start (args, format);
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
   va_end (args);
 {
   va_list args;
   va_start (args, format);
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
   va_end (args);
-  return String (buffer);
+  return string (buffer);
 }
 
 }
 
-String 
-String_convert::vform_str (char const* format, va_list args)
+string
+String_convert::vform_string (char const *format, va_list args)
 {
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
 {
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
-  return String (buffer);
+  return string (buffer);
 }
 
 /**
 }
 
 /**
-  Convert a double to a string.
+   Convert a double to a string.
 
 
-  @param #fmt# is a printf style format, default assumes "%lf" as format
- */
-String
-String_convert::double_str (double f, char const* fmt)
+   @param #fmt# is a printf style format, default assumes "%lf" as format
+*/
+string
+String_convert::double_string (double f, char const *fmt)
 {
 {
-  char buf[STRING_BUFFER_LEN]; 
+  char buf[STRING_BUFFER_LEN];
 
   snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
 
   snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
-  return String (buf);
+  return string (buf);
 }
 
 /**
 }
 
 /**
-Make a string from a single character.
+   Make a string from a single character.
 
 
-  @param
-  #n# is a repetition count, default value is 1
- */
-String
-String_convert::char_str (char c, int n)
+   @param
+   #n# is a repetition count, default value is 1
+*/
+string
+String_convert::char_string (char c, int n)
 {
   n = n >= 0 ? n : 0;
 {
   n = n >= 0 ? n : 0;
-  char* ch_p = new char[ n ];
-  memset (ch_p, c, n);
-  String s ((Byte*)ch_p, n);
-  delete ch_p;
+  char *ch = new char[ n ];
+  memset (ch, c, n);
+  string s (ch, n);
+
+  delete[] ch;
   return s;
 }
 
   return s;
 }
 
-String
-String_convert::rational_str (Rational r)
+string
+String_convert::rational_string (Rational r)
 {
 {
-       return r.str ();
+  return r.to_string ();
 }
 
 }
 
-String
-String_convert::pointer_str (void const *l)
+string
+String_convert::pointer_string (void const *l)
 {
   char buffer[STRING_BUFFER_LEN];
 {
   char buffer[STRING_BUFFER_LEN];
-  snprintf (buffer, STRING_BUFFER_LEN, "%p", l);     // assume radix 10
-  return String (buffer);
+  snprintf (buffer, STRING_BUFFER_LEN, "%p", l); // assume radix 10
+  return string (buffer);
 }
 
 /**
 }
 
 /**
-  Convert a double to a string.
+   Convert a double to a string.
 
 
-  @param
-  #n# is the number of nonzero digits
- */
-String
-String_convert::precision_str (double x, int n)
+   @param
+   #n# is the number of nonzero digits
+*/
+string
+String_convert::precision_string (double x, int n)
 {
 {
-  String format = "%." + to_str (0 >? n - 1) + "e";
-  String str = double_str (abs (x), format.ch_C ());
+  string format = "%." + ::to_string (max (0, n - 1)) + "e";
+  string str = double_string (abs (x), format.c_str ());
 
 
-  int exp = str.right_str (3).value_i ();
-  str = str.left_str (str.length_i () - 4);
+  int exp = dec2int (str.substr (str.length () - 3));
+  str = str.substr (0, str.length () - 4);
 
 
-  while (str[str.length_i () - 1] == '0')
-    str = str.left_str (str.length_i () - 1);
-  if (str[str.length_i () - 1] == '.')
-    str = str.left_str (str.length_i () - 1);
+  while (str[str.length () - 1] == '0')
+    str = str.substr (0, str.length () - 1);
+  if (str[str.length () - 1] == '.')
+    str = str.substr (0, str.length () - 1);
 
   if (exp == 0)
     return (sign (x) > 0 ? str : "-" + str);
 
 
   if (exp == 0)
     return (sign (x) > 0 ? str : "-" + str);
 
-  str = str.left_str (1) + str.cut_str (2, INT_MAX);
-  int dot = 1 + exp;
+  str = str.substr (0, 1) + str.substr (2);
+  ssize dot = 1 + exp;
   if (dot <= 0)
   if (dot <= 0)
-    str = "0." + to_str ('0', -dot) + str;
-  else if (dot >= str.length_i ())
-    str += to_str ('0', dot - str.length_i ());
-  else if (( dot > 0) && (dot < str.length_i ()))
-    str = str.left_str (dot) + "." + str.cut_str (dot, INT_MAX);
+    str = "0." + ::to_string ('0', -dot) + str;
+  else if (dot >= str.length ())
+    str += ::to_string ('0', dot - str.length ());
+  else if ((dot > 0) && (dot < str.length ()))
+    str = str.substr (0, dot) + "." + str.substr (dot);
   else
     assert (0);
 
   return (sign (x) > 0 ? str : "-" + str);
 }
 
   else
     assert (0);
 
   return (sign (x) > 0 ? str : "-" + str);
 }
 
-Array<String>
-String_convert::split_arr (String str, char c)
+string
+String_convert::long_string (long l)
 {
 {
-  Array<String> a;
-  int i = str.index_i (c);
-  while (i >=0)
-    {
-      String s = str.left_str (i);
-      a.push (s);
-      while (str[++i] == c)
-       ;
-      str = str.cut_str (i, INT_MAX);
-      i = str.index_i (c);
-    }
-  if (str.length_i ())
-    a.push (str);
-  return a;
+  char s[STRING_BUFFER_LEN];
+  sprintf (s, "%ld", l);
+  return s;
 }
 
 }
 
+string
+String_convert::unsigned_string (unsigned u)
+{
+  char s[STRING_BUFFER_LEN];
+  sprintf (s, "%u", u);
+  return s;
+}
+
+string
+String_convert::unsigned_long_string (unsigned long ul)
+{
+  char s[STRING_BUFFER_LEN];
+  sprintf (s, "%lu", ul);
+  return s;
+}
+
+string
+String_convert::pad_to (const string &s, size_t n)
+{
+  return s + string (max (int (n - s.length ()), 0), ' ');
+}
+
+string
+String_convert::to_upper (string s)
+{
+  return strnupr (const_cast<char*>(s.c_str ()), s.length ());
+}
+
+string
+String_convert::to_lower (string s)
+{
+  return strnlwr (const_cast<char*>(s.c_str ()), s.length ());
+}
+
+string
+String_convert::reverse (string s)
+{
+  return (char *) memrev ((unsigned char *)s.data (), s.length ());
+}