/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
 * Description: visitor class for expressions
 */
#ifndef __OMNI_RUNTIME_EXPRESSION_VISITOR_H__
#define __OMNI_RUNTIME_EXPRESSION_VISITOR_H__

#include "expressions.h"

class ExprVisitor {
public:
    virtual ~ExprVisitor() = default;
    virtual void Visit(const omniruntime::expressions::LiteralExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::FieldExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::UnaryExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::BinaryExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::InExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::BetweenExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::IfExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::CoalesceExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::IsNullExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::FuncExpr &e) = 0;
    virtual void Visit(const omniruntime::expressions::SwitchExpr &e) = 0;
};

#endif