@@ -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,10 @@ 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+ Operator OperationCode ( const Relational<SomeType> &op);
1422+
1423+ template < typename T> Operator OperationCode ( const Relational<T> &op) {
1424+ switch (op.opr ) {
14271425 case common::RelationalOperator::LT:
14281426 return Operator::Lt;
14291427 case common::RelationalOperator::LE:
@@ -1440,70 +1438,60 @@ Operator OperationCode(
14401438 return Operator::Unknown;
14411439}
14421440
1443- template <typename T, typename ... Ts>
1444- Operator OperationCode (const evaluate::Operation<evaluate::Add<T>, Ts...> &op) {
1441+ template <typename T> Operator OperationCode (const Add<T> &op) {
14451442 return Operator::Add;
14461443}
14471444
1448- template <typename T, typename ... Ts>
1449- Operator OperationCode (
1450- const evaluate::Operation<evaluate::Subtract<T>, Ts...> &op) {
1445+ template <typename T> Operator OperationCode (const Subtract<T> &op) {
14511446 return Operator::Sub;
14521447}
14531448
1454- template <typename T, typename ... Ts>
1455- Operator OperationCode (
1456- const evaluate::Operation<evaluate::Multiply<T>, Ts...> &op) {
1449+ template <typename T> Operator OperationCode (const Multiply<T> &op) {
14571450 return Operator::Mul;
14581451}
14591452
1460- template <typename T, typename ... Ts>
1461- Operator OperationCode (
1462- const evaluate::Operation<evaluate::Divide<T>, Ts...> &op) {
1453+ template <typename T> Operator OperationCode (const Divide<T> &op) {
14631454 return Operator::Div;
14641455}
14651456
1466- template <typename T, typename ... Ts>
1467- Operator OperationCode (
1468- const evaluate::Operation<evaluate::Power<T>, Ts...> &op) {
1457+ template <typename T> Operator OperationCode (const Power<T> &op) {
14691458 return Operator::Pow;
14701459}
14711460
1472- template <typename T, typename ... Ts>
1473- Operator OperationCode (
1474- const evaluate::Operation<evaluate::RealToIntPower<T>, Ts...> &op) {
1461+ template <typename T> Operator OperationCode (const RealToIntPower<T> &op) {
14751462 return Operator::Pow;
14761463}
14771464
1478- template <typename T, common::TypeCategory C, typename ... Ts>
1479- Operator OperationCode (
1480- const evaluate::Operation<evaluate::Convert<T, C>, Ts...> &op) {
1465+ template <typename T, common::TypeCategory C>
1466+ Operator OperationCode (const Convert<T, C> &op) {
14811467 if constexpr (C == T::category) {
14821468 return Operator::Resize;
14831469 } else {
14841470 return Operator::Convert;
14851471 }
14861472}
14871473
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) {
1474+ template <typename T> Operator OperationCode (const Extremum<T> &op) {
1475+ if (op.ordering == Ordering::Greater) {
14921476 return Operator::Max;
14931477 } else {
14941478 return Operator::Min;
14951479 }
14961480}
14971481
1498- template <typename T> Operator OperationCode (const evaluate:: Constant<T> &x) {
1482+ template <typename T> Operator OperationCode (const Constant<T> &x) {
14991483 return Operator::Constant;
15001484}
15011485
1486+ template <typename T> Operator OperationCode (const Designator<T> &x) {
1487+ return Operator::Identity;
1488+ }
1489+
15021490template <typename T> Operator OperationCode (const T &) {
15031491 return Operator::Unknown;
15041492}
15051493
1506- Operator OperationCode (const evaluate:: ProcedureDesignator &proc);
1494+ Operator OperationCode (const ProcedureDesignator &proc);
15071495
15081496} // namespace operation
15091497
0 commit comments