/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * 
 * File:   operators.h
 * Author: pgess <v.melnychenko@xreate.org>
 *
 * Created on April 8, 2017, 1:33 PM
 */

/**
 * \file    operators.h
 * \brief   Helpers to compile various operators
 */

#ifndef OPERATORS_H
#define OPERATORS_H

#include "pass/compilepass.h"

namespace llvm{
  class Value;
}

namespace xreate{ namespace pointerarithmetic{

/** \brief Pointer arithmetic operators */
class PointerArithmetic{
public:
  
  /** \brief Pointer arithmetic operator */
  static llvm::Value* add(llvm::Value *left, llvm::Value *right, compilation::Context context, const std::string& hintVarDecl);
};
} //end of pointerarithmetic namespace

/** \brief Struct update operators */
class StructUpdate{
public:
  
  /** \brief Struct update operator */
  static llvm::Value*  add(const Expression& left, llvm::Value *leftRaw, const Expression& right, compilation::Context context, const std::string& hintVarDecl);
} ;
} //namespace xreate

#endif /* OPERATORS_H */

