/*
  scalar.hh -- declare Scalar

  source file of the Flower Library

  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/


#ifndef SCALAR_HH
#define SCALAR_HH

#include "string.hh"
#include "real.hh"

/// Perl -like scalar type.
struct Scalar : public String 
{
  Scalar (Real r) { *this = to_str (r); }
  Scalar (int i) { *this = to_str (i); }
  Scalar (char c) { *this = to_str (c); }
  Scalar (char const *c) : String (c) {}    
  Scalar (String s) : String (s) {}
  Scalar (Rational);
  operator Rational();
  Scalar() {}
  bool isnum_b() const;
  operator Real();
  operator int();
  bool to_bool () const;

  /*
    urg, these are bit silly; perhaps should make "Print_string" class
    (derive from Scalar?)
   */
  Scalar (Vector const &v);
  Scalar (Matrix const &m);

  /**   perl -like string to bool conversion.
   */
  operator bool() const;
};

#endif // SCALAR_HH

