@@ -1402,10 +1402,8 @@ using OperatorSet = common::EnumSet<Operator, 32>;
14021402
14031403std::string ToString (Operator op);
14041404
1405- template <typename ... Ts, int Kind>
1406- Operator OperationCode (
1407- const evaluate::Operation<evaluate::LogicalOperation<Kind>, Ts...> &op) {
1408- switch (op.derived ().logicalOperator ) {
1405+ template <int Kind> Operator OperationCode (const LogicalOperation<Kind> &op) {
1406+ switch (op.logicalOperator ) {
14091407 case common::LogicalOperator::And:
14101408 return Operator::And;
14111409 case common::LogicalOperator::Or:
@@ -1420,10 +1418,8 @@ Operator OperationCode(
14201418 return Operator::Unknown;
14211419}
14221420
1423- template <typename T, typename ... Ts>
1424- Operator OperationCode (
1425- const evaluate::Operation<evaluate::Relational<T>, Ts...> &op) {
1426- switch (op.derived ().opr ) {
1421+ template <typename T> Operator OperationCode (const Relational<T> &op) {
1422+ switch (op.opr ) {
14271423 case common::RelationalOperator::LT:
14281424 return Operator::Lt;
14291425 case common::RelationalOperator::LE:
@@ -1440,70 +1436,60 @@ Operator OperationCode(
14401436 return Operator::Unknown;
14411437}
14421438
1443- template <typename T, typename ... Ts>
1444- Operator OperationCode (const evaluate::Operation<evaluate::Add<T>, Ts...> &op) {
1439+ template <typename T> Operator OperationCode (const Add<T> &op) {
14451440 return Operator::Add;
14461441}
14471442
1448- template <typename T, typename ... Ts>
1449- Operator OperationCode (
1450- const evaluate::Operation<evaluate::Subtract<T>, Ts...> &op) {
1443+ template <typename T> Operator OperationCode (const Subtract<T> &op) {
14511444 return Operator::Sub;
14521445}
14531446
1454- template <typename T, typename ... Ts>
1455- Operator OperationCode (
1456- const evaluate::Operation<evaluate::Multiply<T>, Ts...> &op) {
1447+ template <typename T> Operator OperationCode (const Multiply<T> &op) {
14571448 return Operator::Mul;
14581449}
14591450
1460- template <typename T, typename ... Ts>
1461- Operator OperationCode (
1462- const evaluate::Operation<evaluate::Divide<T>, Ts...> &op) {
1451+ template <typename T> Operator OperationCode (const Divide<T> &op) {
14631452 return Operator::Div;
14641453}
14651454
1466- template <typename T, typename ... Ts>
1467- Operator OperationCode (
1468- const evaluate::Operation<evaluate::Power<T>, Ts...> &op) {
1455+ template <typename T> Operator OperationCode (const Power<T> &op) {
14691456 return Operator::Pow;
14701457}
14711458
1472- template <typename T, typename ... Ts>
1473- Operator OperationCode (
1474- const evaluate::Operation<evaluate::RealToIntPower<T>, Ts...> &op) {
1459+ template <typename T> Operator OperationCode (const RealToIntPower<T> &op) {
14751460 return Operator::Pow;
14761461}
14771462
1478- template <typename T, common::TypeCategory C, typename ... Ts>
1479- Operator OperationCode (
1480- const evaluate::Operation<evaluate::Convert<T, C>, Ts...> &op) {
1463+ template <typename T, common::TypeCategory C>
1464+ Operator OperationCode (const Convert<T, C> &op) {
14811465 if constexpr (C == T::category) {
14821466 return Operator::Resize;
14831467 } else {
14841468 return Operator::Convert;
14851469 }
14861470}
14871471
1488- template <typename T, typename ... Ts>
1489- Operator OperationCode (
1490- const evaluate::Operation<evaluate::Extremum<T>, Ts...> &op) {
1491- if (op.derived ().ordering == evaluate::Ordering::Greater) {
1472+ template <typename T> Operator OperationCode (const Extremum<T> &op) {
1473+ if (op.ordering == Ordering::Greater) {
14921474 return Operator::Max;
14931475 } else {
14941476 return Operator::Min;
14951477 }
14961478}
14971479
1498- template <typename T> Operator OperationCode (const evaluate:: Constant<T> &x) {
1480+ template <typename T> Operator OperationCode (const Constant<T> &x) {
14991481 return Operator::Constant;
15001482}
15011483
1484+ template <typename T> Operator OperationCode (const Designator<T> &x) {
1485+ return Operator::Identity;
1486+ }
1487+
15021488template <typename T> Operator OperationCode (const T &) {
15031489 return Operator::Unknown;
15041490}
15051491
1506- Operator OperationCode (const evaluate:: ProcedureDesignator &proc);
1492+ Operator OperationCode (const ProcedureDesignator &proc);
15071493
15081494} // namespace operation
15091495
0 commit comments