lilypond-0.1.33
[lilypond.git] / flower / scalar.cc
blob9d7ef229570c1076470645444e05224af8cdc226
1 /*
2 scalar.cc -- implement
4 source file of the Flower Library
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include <assert.h>
10 #include <stdio.h>
11 #include "scalar.hh"
13 Scalar::Scalar (Rational r)
14 :String (r)
19 Scalar::operator Rational ()
21 int p = index_i ('/');
22 if (p == -1)
23 return int (*this);
25 String s2 = right_str (len()-p-1);
26 String s1 = left_str (p);
28 return Rational (s1.value_i (), s2.value_i ());
31 bool
32 Scalar::isnum_b () const
34 int conv = false;
35 if (len ())
37 long l =0;
38 conv = sscanf (strh_.ch_C (), "%ld", &l);
40 return len() && conv;
43 Scalar::operator Real()
45 assert (isnum_b ());
46 return value_f ();
49 Scalar::operator int()
51 if (!length_i ())
52 return 0; // ugh
54 assert (isnum_b());
55 return value_i ();
59 Scalar::operator bool () const
61 if (!len ())
62 return false;
63 if (*this == "0")
64 return false;
65 String u (*this);
66 if (u.upper_str () == "FALSE")
67 return false;
68 return true;