| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef MU_PARSER_INT_H |
| | #define MU_PARSER_INT_H |
| |
|
| | #include "muParserBase.h" |
| | #include <vector> |
| |
|
| |
|
| | |
| | |
| | |
| |
|
| |
|
| | namespace mu |
| | { |
| |
|
| | |
| | |
| | |
| | |
| | |
| | class ParserInt : public ParserBase |
| | { |
| | private: |
| | static int Round(value_type v) { return (int)(v + ((v >= 0) ? 0.5 : -0.5)); }; |
| |
|
| | static value_type Abs(value_type); |
| | static value_type Sign(value_type); |
| | static value_type Ite(value_type, value_type, value_type); |
| | |
| | static value_type UnaryMinus(value_type); |
| | |
| | static value_type Sum(const value_type* a_afArg, int a_iArgc); |
| | static value_type Min(const value_type* a_afArg, int a_iArgc); |
| | static value_type Max(const value_type* a_afArg, int a_iArgc); |
| | |
| | static value_type Add(value_type v1, value_type v2); |
| | static value_type Sub(value_type v1, value_type v2); |
| | static value_type Mul(value_type v1, value_type v2); |
| | static value_type Div(value_type v1, value_type v2); |
| | static value_type Mod(value_type v1, value_type v2); |
| | static value_type Pow(value_type v1, value_type v2); |
| | static value_type Shr(value_type v1, value_type v2); |
| | static value_type Shl(value_type v1, value_type v2); |
| | static value_type BitAnd(value_type v1, value_type v2); |
| | static value_type BitOr(value_type v1, value_type v2); |
| | static value_type And(value_type v1, value_type v2); |
| | static value_type Or(value_type v1, value_type v2); |
| | static value_type Xor(value_type v1, value_type v2); |
| | static value_type Less(value_type v1, value_type v2); |
| | static value_type Greater(value_type v1, value_type v2); |
| | static value_type LessEq(value_type v1, value_type v2); |
| | static value_type GreaterEq(value_type v1, value_type v2); |
| | static value_type Equal(value_type v1, value_type v2); |
| | static value_type NotEqual(value_type v1, value_type v2); |
| | static value_type Not(value_type v1); |
| |
|
| | static int IsHexVal(const char_type* a_szExpr, int* a_iPos, value_type* a_iVal); |
| | static int IsBinVal(const char_type* a_szExpr, int* a_iPos, value_type* a_iVal); |
| | static int IsVal(const char_type* a_szExpr, int* a_iPos, value_type* a_iVal); |
| |
|
| | |
| | template<class TChar> |
| | class change_dec_sep : public std::numpunct<TChar> |
| | { |
| | public: |
| |
|
| | explicit change_dec_sep(char_type cDecSep, char_type cThousandsSep = 0, int nGroup = 3) |
| | :std::numpunct<TChar>() |
| | , m_cDecPoint(cDecSep) |
| | , m_cThousandsSep(cThousandsSep) |
| | , m_nGroup(nGroup) |
| | {} |
| |
|
| | protected: |
| |
|
| | virtual char_type do_decimal_point() const |
| | { |
| | return m_cDecPoint; |
| | } |
| |
|
| | virtual char_type do_thousands_sep() const |
| | { |
| | return m_cThousandsSep; |
| | } |
| |
|
| | virtual std::string do_grouping() const |
| | { |
| | |
| | |
| | |
| | |
| | |
| | return std::string(1, (char)(m_cThousandsSep > 0 ? m_nGroup : CHAR_MAX)); |
| | } |
| |
|
| | private: |
| |
|
| | int m_nGroup; |
| | char_type m_cDecPoint; |
| | char_type m_cThousandsSep; |
| | }; |
| |
|
| | public: |
| | ParserInt(); |
| |
|
| | void InitFun() override; |
| | void InitOprt() override; |
| | void InitConst() override; |
| | void InitCharSets() override; |
| | }; |
| |
|
| | } |
| |
|
| | #endif |
| |
|
| |
|