From a9000260db9a18472e36240dba55856ec08cb21a Mon Sep 17 00:00:00 2001 From: fred Date: Wed, 4 Dec 1996 21:39:43 +0000 Subject: [PATCH] flower-1.0.11 --- flower/dstream.cc | 4 ++-- flower/scalar.cc | 38 ++++++++++++++++++++++++++++++++++++++ flower/scalar.hh | 32 ++++++++++++++++++++++++++++++++ flower/string.cc | 47 ++++------------------------------------------- 4 files changed, 76 insertions(+), 45 deletions(-) create mode 100644 flower/scalar.cc create mode 100644 flower/scalar.hh diff --git a/flower/dstream.cc b/flower/dstream.cc index 6cfc62eb3d..b4267f3502 100644 --- a/flower/dstream.cc +++ b/flower/dstream.cc @@ -1,7 +1,7 @@ #include #include "assoc.hh" #include "dstream.hh" -#include "string.hh" +#include "scalar.hh" #include "textdb.hh" /// indent of each level @@ -118,7 +118,7 @@ Dstream::Dstream(ostream *r, const char * cfg_nm ) r.message("not enough fields in Dstream init."); continue; } - (*silent)[r[0]] = r[1].to_bool(); + (*silent)[r[0]] = Scalar(r[1]).to_bool(); } } diff --git a/flower/scalar.cc b/flower/scalar.cc new file mode 100644 index 0000000000..b53693928f --- /dev/null +++ b/flower/scalar.cc @@ -0,0 +1,38 @@ +#include +#include "scalar.hh" + +bool +Scalar::isnum() +{ + int conv = false; + if (len()) { + long l =0; + conv = sscanf(data, "%ld", &l); + } + return len() && conv; +} + +Scalar::operator Real() +{ + assert (isnum()); + return fvalue(); +} + +Scalar::operator int() +{ + assert (isnum()); + return value(); +} +bool +Scalar::to_bool() const +{ + if (!len()) + return false; + if (*this == "0") + return false; + String u (*this); + u.upper(); + if (u== "FALSE") + return false; + return true; +} diff --git a/flower/scalar.hh b/flower/scalar.hh new file mode 100644 index 0000000000..5d02d6936c --- /dev/null +++ b/flower/scalar.hh @@ -0,0 +1,32 @@ +/* + scalar.hh -- part of LilyPond + + (c) 1996 Han-Wen Nienhuys +*/ + +#ifndef SCALAR_HH +#define SCALAR_HH +#include "string.hh" +#include "real.hh" + +/// Perl -like scalar type. +struct Scalar : public String { + + Scalar(Real r) : String(r) {} + Scalar(int i) : String(i) {} + Scalar(char c) : String(c) {} + Scalar(const char *c) : String(c) {} + Scalar(String s ):String(s) {} + Scalar() {} + bool isnum(); + operator Real(); + operator int(); + /// + bool to_bool() const; + /** perl -like string to bool conversion + */ + +}; + +#endif // SCALAR_HH + diff --git a/flower/string.cc b/flower/string.cc index 2e8e8bf5c6..9c6792c021 100644 --- a/flower/string.cc +++ b/flower/string.cc @@ -12,9 +12,10 @@ #include #include #include -//#include "globals.hh" + #include "string.hh" + static char* strlwr( char* s ) { char* p = s; @@ -108,41 +109,14 @@ String::String( const int i, const int n, const char c ) // String convd to const char * } - const char* -String::ptr() const +const char* +String::cptr() const { return data; } -#ifdef CENTRAL_OBJECT // everything derived from Sortable object -// comparisons. -int -String::operator ==( const Sortable& test ) const -{ - const String *s = (const String *) &test; - return *this == *s; -} - -int -String::operator &&(const Object& test) const -{ - const String *s = (const String *) &test; - - int i = min( len(), s->len() ); - return ( i > 0 ) ? - ( !strncmp( data, s->data, i ) ) : 0; -} - -int -String::operator >( const Sortable& test ) const -{ - const String *s = (const String *) &test; - return strcmp( data, s->data ) > 0; -} -#endif - // signed comparison, analogous to strcmp; int String::compare( const char* test ) const @@ -386,16 +360,3 @@ String::reversed() const strrev(s); return retval; } -bool -String::to_bool() const -{ - if (!len()) - return false; - if (*this == "0") - return false; - String u (*this); - u.upper(); - if (u== "FALSE") - return false; - return true; -} -- 2.39.5