X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Fstring.cc;h=c0e2e99c724202940ef18d001129184e3b388e21;hb=73e40a0dd515fd996ee0918dd96b42a754f623d5;hp=a68afb58873a40744592b9ca6d1f44565351fe28;hpb=cec6dfa6bf0fb931eb7f42b1ee44ca2ec19a9f34;p=lilypond.git diff --git a/flower/string.cc b/flower/string.cc index a68afb5887..c0e2e99c72 100644 --- a/flower/string.cc +++ b/flower/string.cc @@ -2,15 +2,21 @@ string.cc - implement String - (c) 1997 Han-Wen Nienhuys & Jan Nieuwenhuizen + (c) 1997--2000 Han-Wen Nienhuys & Jan Nieuwenhuizen */ +#ifndef _GNU_SOURCE // we want memmem +#define _GNU_SOURCE +#endif + #include #include - #include #include +#include + +#include #include "string.hh" #include "libc-extension.hh" @@ -23,22 +29,20 @@ void* mymemmove (void* dest, void const* src, size_t n); // return array, alloced with new. Byte* -String::copy_byte_p() const +String::get_copy_byte () const { - Byte const* src = strh_.byte_C(); - Byte* dest = new Byte[strh_.length_i() + 1]; - memcpy (dest, src, strh_.length_i() + 1); + Byte const* src = strh_.to_bytes (); + Byte* dest = new Byte[strh_.length () + 1]; + memcpy (dest, src, strh_.length () + 1); return dest; } -void -String::print_on (ostream& os) const + +char* +String::get_copy_str0 () const { - if (!strh_.is_binary_bo()) - os << ch_C(); - else - for (int i = 0; i < length_i(); i++) - os << (Byte)(*this)[ i ]; + return (char*)get_copy_byte (); } + /* copying, constructing. @@ -51,53 +55,62 @@ String::operator = (String const&source) } -String::String (Rational r) -{ - *this = String_convert::rational_str (r); +String::String (Byte const* byte, int len_i) +{ + strh_.set (byte, len_i); } -String::String (double f, char const* fmt) +/** + @see + String_convert:: + */ +String +to_string (char c, int n) { - *this= String_convert::double_str (f,fmt); + return String_convert::char_string (c, n); } -String::String (char c, int n) +String +to_string (double f, char const* format) { - *this = String_convert::char_str (c,n); + return String_convert::double_string (f, format); } -/** - @see - String_convert::int_str - */ -String::String (int i, char const * format) +String +to_string (int i, char const * format) { - *this = String_convert::int_str (i,format); + return String_convert::int_string (i, format); } -String::String (bool b) +String +to_string (bool b) { - *this = (char const*) (b ? "true" : "false"); + return String_convert::bool_string (b); } - -String::String (char const* source) -{ - assert (source); - strh_ = source; +String +to_string (long b) +{ + return String_convert::long_string (b); } -String::String (Byte const* byte_l, int length_i) -{ - strh_.set (byte_l, length_i); +String +to_string (char const* format, ... ) +{ + va_list args; + va_start (args, format); + String str = String_convert::vform_string (format, args); + va_end (args); + return str; } + void String::append (String s) { - strh_.append (s.byte_C(), s.length_i()); + strh_.append (s.to_bytes (), s.length ()); } void -String::operator +=(String s) +String::operator += (String s) { append (s); } @@ -110,84 +123,91 @@ String::prepend (String s) } int -String::length_i() const +String::length () const { - return strh_.length_i(); + return strh_.length (); } Byte const* -String::byte_C() const +String::to_bytes () const { - return strh_.byte_C(); + return strh_.to_bytes (); } char const* -String::ch_C() const +String::to_str0 () const { - return strh_.ch_C(); + return strh_.to_str0 (); } Byte* -String::byte_l() +String::get_bytes () { - return strh_.byte_l(); + return strh_.get_bytes (); } char* -String::ch_l() +String::get_str0 () { - return strh_.ch_l(); + return strh_.get_str0 (); } +bool +String::empty_b () const +{ + return !length (); +} /** Do a signed comparison, analogous to memcmp; */ int -String::compare_i (String const& s1, String const& s2) +String::compare (String const& s1, String const& s2) { - Byte const* p1 = s1.byte_C(); - Byte const* p2 = s2.byte_C(); + Byte const* p1 = s1.to_bytes (); + Byte const* p2 = s2.to_bytes (); if (p1 == p2) - return 0; - - int i1 = s1.length_i(); - int i2 = s2.length_i(); + return 0; - int result= memcmp (p1, p2, i1 = 0) { - index_i += next_i; - next_i = right_str (length_i() - index_i - length).index_i (string ); + index_i += next_i; + next_i = right_string (length () - index_i - len).index (string ); } return index_i; } @@ -195,73 +215,78 @@ String::index_last_i (char const* string) const // UGK! /** find a character. @return - the index of the leftmost character #c# (0 <= return < length_i()), + the index of the leftmost character #c# (0 <= return < length ()), or -1 if not found. - ? should return length_i()?, as in string.left_str (index_i (delimiter)) + ? should return length ()?, as in string.left_string (index (delimiter)) */ int -String::index_i (char c) const +String::index (char c) const { - char const* me = strh_.ch_C(); - char const* p = (char const *) memchr (me,c, length_i()); + char const* me = strh_.to_str0 (); + char const* p = (char const *) memchr (me,c, length ()); if (p) - return p - me; + return p - me; return -1; } /** - find the substring. + find a substring. @return - index of leftmost occurrence of #searchfor# +1 index of leftmost occurrence of #searchfor# */ int -String::index_i (String searchfor) const +String::index (String searchfor) const { - char const* me = strh_.ch_C(); - char const* p = (char const *) memmem ( - me, length_i(), searchfor.ch_C(), searchfor.length_i ()); + char const* me = strh_.to_str0 (); + + char const* p = (char const *) + memmem (me, length (), searchfor.to_str0 (), searchfor.length ()); if (p) - return p - me; + return p - me; else - return -1; + return -1; } /** find chars of a set. @return - the index of the leftmost occurance of an element of #set# - */ + + the index of the leftmost occurance of an element of #set#. -1 if + nothing is found. + + +*/ int -String::index_any_i (String set) const +String::index_any (String set) const { - int n = length_i(); + int n = length (); if (!n) - return -1; + return -1; - void const * me_l = (void const *) strh_.ch_C(); - for (int i=0; i < set.length_i(); i++) + void const * me = (void const *) strh_.to_str0 (); + for (int i=0; i < set.length (); i++) { - char * found=(char*) memchr (me_l, set[i], n ); - if (found) - { - return found - me_l; - } + char * found= (char*) memchr (me, set[i], n ); + if (found) + { + return found - (char const*)me; + } } return -1; } String -String::left_str (int n) const +String::left_string (int n) const { - if (n >= length_i()) - return *this; + if (n >= length ()) + return *this; String retval; if (n < 1) - return retval; + return retval; retval = *this; retval.strh_.trunc (n); @@ -269,102 +294,117 @@ String::left_str (int n) const } String -String::right_str (int n) const +String::right_string (int n) const { - if (n > length_i()) - return *this; + if (n > length ()) + return *this; if (n < 1) - return ""; + return ""; - return String (strh_.byte_C() + length_i() - n, n); + return String (strh_.to_bytes () + length () - n, n); } String -String::nomid_str (int index_i, int n) const +String::nomid_string (int index_i, int n) const { if (index_i < 0) { - n += index_i; - index_i = 0; + n += index_i; + index_i = 0; } if (n <= 0) - return *this; + return *this; return - left_str (index_i) + - right_str (length_i() - index_i - n) ; + left_string (index_i) + + right_string (length () - index_i - n) ; } -/* - proposal: change to "cut()" - */ String -String::mid_str (int index_i, int n) const +String::cut_string (int index_i, int n) const { if (index_i <0) { - n += index_i; - index_i=0; + n += index_i; + index_i=0; } - if (!length_i() || (index_i < 0) || (index_i >= length_i () ) || (n < 1 ) ) - return String(); + if (!length () || (index_i < 0) || (index_i >= length () ) || (n < 1 ) ) + return String (); - if ((n > length_i()) || (index_i + n > length_i () ) ) - n = length_i() - index_i; + if ((n > length ()) || (index_i + n > length () ) ) + n = length () - index_i; - return String (byte_C() + index_i, n); + return String (to_bytes () + index_i, n); } String -String::upper_str() const +String::upper_string () const { String str = *this; - str.to_upper(); + str.to_upper (); return str; } void -String::to_upper() +String::to_upper () { - char *s = (char*)strh_.byte_l(); - strnupr (s ,length_i()); + char *s = (char*)strh_.get_bytes (); + strnupr (s ,length ()); } void -String::to_lower() +String::to_lower () { - char* s = strh_.ch_l(); - strnlwr (s,length_i()); + char* s = strh_.get_str0 (); + strnlwr (s,length ()); } String -String::lower_str() const +String::lower_string () const { String str = *this; - str.to_lower(); + str.to_lower (); return str; } String -String::reversed_str() const +String::reversed_string () const { String str = *this; - strrev (str.byte_l(), str.length_i ()); + strrev (str.get_bytes (), str.length ()); return str; } int -String::value_i() const +String::to_int () const { - return String_convert::dec2_i (*this); + return String_convert::dec2int (*this); } double -String::value_f() const +String::to_double () const +{ + return String_convert::dec2double (*this); +} + +#ifdef STREAM_SUPPORT +ostream & +operator << (ostream& os, String d) { - return String_convert::dec2_f (*this); + d.print_on (os); + return os; } +void +String::print_on (ostream& os) const +{ + if (!strh_.is_binary_bo ()) + os << to_str0 (); + else + for (int i = 0; i < length (); i++) + os << (Byte) (*this)[ i ]; +} +#endif