lilypond-1.1.33
[lilypond.git] / flower / scalar.cc
blobc0ef60d744c311d88a6b462aff3da26389acc607
1 /*
2 scalar.cc -- implement Scalar
4 source file of the Flower Library
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
9 #include <assert.h>
10 #include <stdio.h>
11 #include "scalar.hh"
12 #include "rational.hh"
13 #include "matrix.hh"
15 Scalar::Scalar (Rational r)
17 (*this) = r.str ();
20 Scalar::operator Rational ()
22 return to_rat ();
25 Rational
26 Scalar::to_rat () const
28 int p = index_i ('/');
29 if (p == -1)
30 return this->to_i ();
32 String s2 = right_str (length_i ()-p-1);
33 String s1 = left_str (p);
35 return Rational (s1.value_i (), s2.value_i ());
38 bool
39 Scalar::isnum_b () const
41 int conv = false;
42 if (length_i ())
44 long l =0;
45 conv = sscanf (strh_.ch_C (), "%ld", &l);
47 return length_i () && conv;
50 Scalar::operator Real()
52 return to_f ();
55 Real
56 Scalar::to_f () const
58 assert (isnum_b ());
59 return value_f ();
62 Scalar::operator int ()
64 return to_i ();
67 int
68 Scalar::to_i () const
70 if (!length_i ())
71 return 0; // ugh
73 assert (isnum_b());
74 return value_i ();
77 Scalar::operator bool () const
79 return to_bool ();
82 bool
83 Scalar::to_bool () const
85 if (!length_i ())
86 return false;
87 if (*this == "0")
88 return false;
89 String u (*this);
90 if (u.upper_str () == "FALSE")
91 return false;
92 return true;
95 Scalar::Scalar(Matrix const &m)
97 *this = m.str ();
100 Scalar::Scalar (Vector const &v)
102 *this = v.str ();