// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "constant.h" #include #include namespace Fortran::evaluate { template ScalarIntegerConstant ScalarIntegerConstant::Negate() const { ScalarIntegerConstant result{*this}; return result.Assign(-static_cast(value_)); } template ScalarIntegerConstant ScalarIntegerConstant::Add( const ScalarIntegerConstant &that) const { ScalarIntegerConstant result{*this}; return result.Assign( static_cast(value_) + static_cast(that.value_)); } template ScalarIntegerConstant ScalarIntegerConstant::Subtract( const ScalarIntegerConstant &that) const { ScalarIntegerConstant result{*this}; return result.Assign( static_cast(value_) - static_cast(that.value_)); } template ScalarIntegerConstant ScalarIntegerConstant::Multiply( const ScalarIntegerConstant &that) const { ScalarIntegerConstant result{*this}; return result.Assign( static_cast(value_) - static_cast(that.value_)); } template ScalarIntegerConstant ScalarIntegerConstant::Divide( const ScalarIntegerConstant &that) const { ScalarIntegerConstant result{*this}; if (that.value_ == 0) { result.SetError(Error::DivisionByZero); return result; } else { return result.Assign( static_cast(value_) / static_cast(that.value_)); } } template class ScalarConstant; } // namespace Fortran::evaluate