From 4624a3104da35f8dec5be9fa4028c06eff0fe12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Tue, 4 Sep 2018 16:28:38 +0200 Subject: [PATCH] Macroprocessor: implement power operator for integers For consistency with the power operator for sets (see #5). --- src/macro/MacroValue.cc | 10 ++++++++++ src/macro/MacroValue.hh | 1 + 2 files changed, 11 insertions(+) diff --git a/src/macro/MacroValue.cc b/src/macro/MacroValue.cc index 737168c9..6088bdb2 100644 --- a/src/macro/MacroValue.cc +++ b/src/macro/MacroValue.cc @@ -18,6 +18,7 @@ */ #include +#include #include "MacroDriver.hh" @@ -198,6 +199,15 @@ IntMV::divide(const MacroValuePtr &mv) noexcept(false) return make_shared(value / mv2->value); } +MacroValuePtr +IntMV::power(const MacroValuePtr &mv) noexcept(false) +{ + auto mv2 = dynamic_pointer_cast(mv); + if (!mv2) + throw TypeError("Type mismatch for operands of ^ operator"); + return make_shared(pow(value, mv2->value)); +} + shared_ptr IntMV::is_less(const MacroValuePtr &mv) noexcept(false) { diff --git a/src/macro/MacroValue.hh b/src/macro/MacroValue.hh index f0eff55e..acb6447d 100644 --- a/src/macro/MacroValue.hh +++ b/src/macro/MacroValue.hh @@ -135,6 +135,7 @@ public: MacroValuePtr times(const MacroValuePtr &mv) noexcept(false) override; //! Computes arithmetic division MacroValuePtr divide(const MacroValuePtr &mv) noexcept(false) override; + MacroValuePtr power(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_less(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_greater(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_less_equal(const MacroValuePtr &mv) noexcept(false) override;