blob: 25ea30a0a081993d6dd06add088e613d353c29a0 [file]
/*
* Copyright 2020 The casbin Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cvaluate/OperatorSymbol.h>
namespace Cvaluate {
OperatorPrecedence FindOperatorPrecedenceForSymbol(OperatorSymbol symbol) {
switch (symbol) {
case OperatorSymbol::NOOP:
return OperatorPrecedence::NoopPrecedence;
case OperatorSymbol::VALUE:
return OperatorPrecedence::ValuePrecedence;
case OperatorSymbol::EQ:
case OperatorSymbol::NEQ:
case OperatorSymbol::GT:
case OperatorSymbol::LT:
case OperatorSymbol::GTE:
case OperatorSymbol::LTE:
case OperatorSymbol::REQ:
case OperatorSymbol::NREQ:
case OperatorSymbol::IN:
return OperatorPrecedence::ComparatorPrecedence;
case OperatorSymbol::AND:
return OperatorPrecedence::LogicalAndPrecedence;
case OperatorSymbol::OR:
return OperatorPrecedence::LogicalOrPrecedence;
case OperatorSymbol::BITWISE_AND:
case OperatorSymbol::BITWISE_OR:
case OperatorSymbol::BITWISE_XOR:
return OperatorPrecedence::BitwisePrecedence;
case OperatorSymbol::BITWISE_LSHIFT:
case OperatorSymbol::BITWISE_RSHIFT:
return OperatorPrecedence::BitwiseShiftPrecedence;
case OperatorSymbol::PLUS:
case OperatorSymbol::MINUS:
return OperatorPrecedence::AdditivePrecedence;
case OperatorSymbol::MULTIPLY:
case OperatorSymbol::DIVIDE:
case OperatorSymbol::MODULUS:
return OperatorPrecedence::MultiplicativePrecedence;
case OperatorSymbol::EXPONENT:
return OperatorPrecedence::ExponentialPrecedence;
case OperatorSymbol::BITWISE_NOT:
case OperatorSymbol::NEGATE:
case OperatorSymbol::INVERT:
return OperatorPrecedence::PrefixPrecedence;
case OperatorSymbol::COALESCE:
case OperatorSymbol::TERNARY_TRUE:
case OperatorSymbol::TERNARY_FALSE:
return OperatorPrecedence::TernaryPrecedence;
case OperatorSymbol::ACCESS:
case OperatorSymbol::FUNCTIONAL:
return OperatorPrecedence::FunctionalPrecedence;
case OperatorSymbol::SEPARATE:
return OperatorPrecedence::SeparatePrecedence;
default:
return OperatorPrecedence::ValuePrecedence;
}
}
} // cvaluate