#ifndef SCALAR_H
#define SCALAR_H

#include "symbol.h"

namespace Frost {

class State;

class Scalar : public Symbol
{
public :

    Scalar(const s_str& sName) : Symbol(sName), v(s_double::NaN) {}
    Scalar(const s_str& sName, const s_double& dValue) : Symbol(sName), v(dValue) {}

    virtual s_str            PrintContent() const;
    virtual s_str            GetType() const;
    virtual s_refptr<Symbol> Clone() const;

    static s_bool           IsNumber(const s_str& s);
    static s_bool           MatchesConstructor(const s_str& s);
    static s_refptr<Symbol> CreateFrom(State& mState, const s_str& n, const s_str& s, s_str& e);
    static void             Register(State& mState);

    s_double v;
    static const s_str TYPE;
};

}

#endif
