- //===------ ISLOperators.h --------------------------------------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // Operator overloads for isl C++ objects. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef POLLY_ISLOPERATORS_H 
- #define POLLY_ISLOPERATORS_H 
-   
- #include "isl/isl-noexceptions.h" 
-   
- namespace polly { 
-   
- /// Addition 
- /// @{ 
- inline isl::pw_aff operator+(isl::pw_aff Left, isl::pw_aff Right) { 
-   return Left.add(Right); 
- } 
-   
- inline isl::pw_aff operator+(isl::val ValLeft, isl::pw_aff Right) { 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.add(Right); 
- } 
-   
- inline isl::pw_aff operator+(isl::pw_aff Left, isl::val ValRight) { 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.add(Right); 
- } 
-   
- inline isl::pw_aff operator+(long IntLeft, isl::pw_aff Right) { 
-   isl::ctx Ctx = Right.ctx(); 
-   isl::val ValLeft(Ctx, IntLeft); 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.add(Right); 
- } 
-   
- inline isl::pw_aff operator+(isl::pw_aff Left, long IntRight) { 
-   isl::ctx Ctx = Left.ctx(); 
-   isl::val ValRight(Ctx, IntRight); 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.add(Right); 
- } 
- /// @} 
-   
- /// Multiplication 
- /// @{ 
- inline isl::pw_aff operator*(isl::pw_aff Left, isl::pw_aff Right) { 
-   return Left.mul(Right); 
- } 
-   
- inline isl::pw_aff operator*(isl::val ValLeft, isl::pw_aff Right) { 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.mul(Right); 
- } 
-   
- inline isl::pw_aff operator*(isl::pw_aff Left, isl::val ValRight) { 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.mul(Right); 
- } 
-   
- inline isl::pw_aff operator*(long IntLeft, isl::pw_aff Right) { 
-   isl::ctx Ctx = Right.ctx(); 
-   isl::val ValLeft(Ctx, IntLeft); 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.mul(Right); 
- } 
-   
- inline isl::pw_aff operator*(isl::pw_aff Left, long IntRight) { 
-   isl::ctx Ctx = Left.ctx(); 
-   isl::val ValRight(Ctx, IntRight); 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.mul(Right); 
- } 
- /// @} 
-   
- /// Subtraction 
- /// @{ 
- inline isl::pw_aff operator-(isl::pw_aff Left, isl::pw_aff Right) { 
-   return Left.sub(Right); 
- } 
-   
- inline isl::pw_aff operator-(isl::val ValLeft, isl::pw_aff Right) { 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.sub(Right); 
- } 
-   
- inline isl::pw_aff operator-(isl::pw_aff Left, isl::val ValRight) { 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.sub(Right); 
- } 
-   
- inline isl::pw_aff operator-(long IntLeft, isl::pw_aff Right) { 
-   isl::ctx Ctx = Right.ctx(); 
-   isl::val ValLeft(Ctx, IntLeft); 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.sub(Right); 
- } 
-   
- inline isl::pw_aff operator-(isl::pw_aff Left, long IntRight) { 
-   isl::ctx Ctx = Left.ctx(); 
-   isl::val ValRight(Ctx, IntRight); 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.sub(Right); 
- } 
- /// @} 
-   
- /// Division 
- /// 
- /// This division rounds towards zero. This follows the semantics of C/C++. 
- /// 
- /// @{ 
- inline isl::pw_aff operator/(isl::pw_aff Left, isl::pw_aff Right) { 
-   return Left.tdiv_q(Right); 
- } 
-   
- inline isl::pw_aff operator/(isl::val ValLeft, isl::pw_aff Right) { 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.tdiv_q(Right); 
- } 
-   
- inline isl::pw_aff operator/(isl::pw_aff Left, isl::val ValRight) { 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.tdiv_q(Right); 
- } 
-   
- inline isl::pw_aff operator/(long IntLeft, isl::pw_aff Right) { 
-   isl::ctx Ctx = Right.ctx(); 
-   isl::val ValLeft(Ctx, IntLeft); 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.tdiv_q(Right); 
- } 
-   
- inline isl::pw_aff operator/(isl::pw_aff Left, long IntRight) { 
-   isl::ctx Ctx = Left.ctx(); 
-   isl::val ValRight(Ctx, IntRight); 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.tdiv_q(Right); 
- } 
- /// @} 
-   
- /// Remainder 
- /// 
- /// This is the remainder of a division which rounds towards zero. This follows 
- /// the semantics of C/C++. 
- /// 
- /// @{ 
- inline isl::pw_aff operator%(isl::pw_aff Left, isl::pw_aff Right) { 
-   return Left.tdiv_r(Right); 
- } 
-   
- inline isl::pw_aff operator%(isl::val ValLeft, isl::pw_aff Right) { 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.tdiv_r(Right); 
- } 
-   
- inline isl::pw_aff operator%(isl::pw_aff Left, isl::val ValRight) { 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.tdiv_r(Right); 
- } 
-   
- inline isl::pw_aff operator%(long IntLeft, isl::pw_aff Right) { 
-   isl::ctx Ctx = Right.ctx(); 
-   isl::val ValLeft(Ctx, IntLeft); 
-   isl::pw_aff Left(Right.domain(), ValLeft); 
-   return Left.tdiv_r(Right); 
- } 
-   
- inline isl::pw_aff operator%(isl::pw_aff Left, long IntRight) { 
-   isl::ctx Ctx = Left.ctx(); 
-   isl::val ValRight(Ctx, IntRight); 
-   isl::pw_aff Right(Left.domain(), ValRight); 
-   return Left.tdiv_r(Right); 
- } 
- /// @} 
-   
- } // namespace polly 
-   
- #endif // POLLY_ISLOPERATORS_H 
-