GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
chaiscript_algebraic.hpp
Go to the documentation of this file.
1// This file is distributed under the BSD License.
2// See "license.txt" for details.
3// Copyright 2009-2012, Jonathan Turner (jonathan@emptycrate.com)
4// Copyright 2009-2017, Jason Turner (jason@emptycrate.com)
5// http://www.chaiscript.com
6
7// This is an open source non-commercial project. Dear PVS-Studio, please check it.
8// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
9
10
11#ifndef CHAISCRIPT_ALGEBRAIC_HPP_
12#define CHAISCRIPT_ALGEBRAIC_HPP_
13
14#include "../utility/fnv1a.hpp"
15
16#include <string>
17
18namespace chaiscript
19{
20
21 struct Operators {
38
39 static const char *to_string(Opers t_oper) {
40 static const char *opers[] = {
41 "",
42 "==", "<", ">", "<=", ">=", "!=",
43 "",
44 "=", "++", "--", "*=", "+=",
45 "/=", "-=",
46 "",
47 "&=", "|=", "<<=", ">>=",
48 "%=", "^=",
49 "",
50 "<<", ">>", "%", "&", "|", "^", "~",
51 "",
52 "+", "/", "*", "-", "+", "-",
53 ""
54 };
55 return opers[static_cast<int>(t_oper)];
56 }
57
58 static Opers to_operator(const std::string &t_str, bool t_is_unary = false)
59 {
60#ifdef CHAISCRIPT_MSVC
61#pragma warning(push)
62#pragma warning(disable : 4307)
63#endif
64
65 const auto op_hash = utility::fnv1a_32(t_str.c_str());
66 switch (op_hash) {
67 case utility::fnv1a_32("=="): { return Opers::equals; }
68 case utility::fnv1a_32("<"): { return Opers::less_than; }
69 case utility::fnv1a_32(">"): { return Opers::greater_than; }
70 case utility::fnv1a_32("<="): { return Opers::less_than_equal; }
71 case utility::fnv1a_32(">="): { return Opers::greater_than_equal; }
72 case utility::fnv1a_32("!="): { return Opers::not_equal; }
73 case utility::fnv1a_32("="): { return Opers::assign; }
74 case utility::fnv1a_32("++"): { return Opers::pre_increment; }
75 case utility::fnv1a_32("--"): { return Opers::pre_decrement; }
76 case utility::fnv1a_32("*="): { return Opers::assign_product; }
77 case utility::fnv1a_32("+="): { return Opers::assign_sum; }
78 case utility::fnv1a_32("-="): { return Opers::assign_difference; }
79 case utility::fnv1a_32("&="): { return Opers::assign_bitwise_and; }
80 case utility::fnv1a_32("|="): { return Opers::assign_bitwise_or; }
81 case utility::fnv1a_32("<<="): { return Opers::assign_shift_left; }
82 case utility::fnv1a_32(">>="): { return Opers::assign_shift_right; }
83 case utility::fnv1a_32("%="): { return Opers::assign_remainder; }
84 case utility::fnv1a_32("^="): { return Opers::assign_bitwise_xor; }
85 case utility::fnv1a_32("<<"): { return Opers::shift_left; }
86 case utility::fnv1a_32(">>"): { return Opers::shift_right; }
87 case utility::fnv1a_32("%"): { return Opers::remainder; }
88 case utility::fnv1a_32("&"): { return Opers::bitwise_and; }
89 case utility::fnv1a_32("|"): { return Opers::bitwise_or; }
90 case utility::fnv1a_32("^"): { return Opers::bitwise_xor; }
91 case utility::fnv1a_32("~"): { return Opers::bitwise_complement; }
92 case utility::fnv1a_32("+"): { return t_is_unary ? Opers::unary_plus : Opers::sum; }
93 case utility::fnv1a_32("-"): { return t_is_unary ? Opers::unary_minus : Opers::difference; }
94 case utility::fnv1a_32("/"): { return Opers::quotient; }
95 case utility::fnv1a_32("*"): { return Opers::product; }
96 default: { return Opers::invalid; }
97 }
98#ifdef CHAISCRIPT_MSVC
99#pragma warning(pop)
100#endif
101
102 }
103
104 };
105}
106
107#endif /* _CHAISCRIPT_ALGEBRAIC_HPP */
108
Namespace chaiscript contains every API call that the average user will be concerned with.
Definition chaiscript_algebraic.hpp:21
Opers
Definition chaiscript_algebraic.hpp:23
@ shift_right
Definition chaiscript_algebraic.hpp:33
@ pre_increment
Definition chaiscript_algebraic.hpp:27
@ non_const_int_flag
Definition chaiscript_algebraic.hpp:29
@ sum
Definition chaiscript_algebraic.hpp:35
@ pre_decrement
Definition chaiscript_algebraic.hpp:27
@ less_than_equal
Definition chaiscript_algebraic.hpp:25
@ boolean_flag
Definition chaiscript_algebraic.hpp:24
@ bitwise_and
Definition chaiscript_algebraic.hpp:33
@ bitwise_xor
Definition chaiscript_algebraic.hpp:33
@ assign_bitwise_or
Definition chaiscript_algebraic.hpp:30
@ unary_minus
Definition chaiscript_algebraic.hpp:35
@ assign
Definition chaiscript_algebraic.hpp:27
@ const_flag
Definition chaiscript_algebraic.hpp:34
@ equals
Definition chaiscript_algebraic.hpp:25
@ assign_shift_left
Definition chaiscript_algebraic.hpp:30
@ bitwise_complement
Definition chaiscript_algebraic.hpp:33
@ assign_sum
Definition chaiscript_algebraic.hpp:27
@ assign_product
Definition chaiscript_algebraic.hpp:27
@ less_than
Definition chaiscript_algebraic.hpp:25
@ assign_remainder
Definition chaiscript_algebraic.hpp:31
@ quotient
Definition chaiscript_algebraic.hpp:35
@ assign_bitwise_xor
Definition chaiscript_algebraic.hpp:31
@ remainder
Definition chaiscript_algebraic.hpp:33
@ assign_bitwise_and
Definition chaiscript_algebraic.hpp:30
@ assign_difference
Definition chaiscript_algebraic.hpp:28
@ difference
Definition chaiscript_algebraic.hpp:35
@ not_equal
Definition chaiscript_algebraic.hpp:25
@ const_int_flag
Definition chaiscript_algebraic.hpp:32
@ assign_quotient
Definition chaiscript_algebraic.hpp:28
@ greater_than_equal
Definition chaiscript_algebraic.hpp:25
@ shift_left
Definition chaiscript_algebraic.hpp:33
@ unary_plus
Definition chaiscript_algebraic.hpp:35
@ non_const_flag
Definition chaiscript_algebraic.hpp:26
@ bitwise_or
Definition chaiscript_algebraic.hpp:33
@ product
Definition chaiscript_algebraic.hpp:35
@ assign_shift_right
Definition chaiscript_algebraic.hpp:30
@ greater_than
Definition chaiscript_algebraic.hpp:25
@ invalid
Definition chaiscript_algebraic.hpp:36
static const char * to_string(Opers t_oper)
Definition chaiscript_algebraic.hpp:39
static Opers to_operator(const std::string &t_str, bool t_is_unary=false)
Definition chaiscript_algebraic.hpp:58