diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2022-05-11 16:58:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-11 16:58:33 +0200 |
commit | d68c355145d5c07070fc999eedf8c973d8c70fbe (patch) | |
tree | e742dd05ac899338debc63b5ec33ddc4e81ac569 /core/variant/variant_op.h | |
parent | 0b0beae097b887feec721297e33de15e139baafc (diff) | |
parent | dbd7a315074257bca834e1448b53a905ebb8dd8b (diff) |
Merge pull request #58873 from Chaosus/power_op
Implement exponential operator (**) to GDScript/Expressions
Diffstat (limited to 'core/variant/variant_op.h')
-rw-r--r-- | core/variant/variant_op.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/core/variant/variant_op.h b/core/variant/variant_op.h index f72a92d31a..3e9bae1078 100644 --- a/core/variant/variant_op.h +++ b/core/variant/variant_op.h @@ -92,6 +92,24 @@ public: }; template <class R, class A, class B> +class OperatorEvaluatorPow { +public: + static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { + const A &a = *VariantGetInternalPtr<A>::get_ptr(&p_left); + const B &b = *VariantGetInternalPtr<B>::get_ptr(&p_right); + *r_ret = R(Math::pow((double)a, (double)b)); + r_valid = true; + } + static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { + *VariantGetInternalPtr<R>::get_ptr(r_ret) = R(Math::pow((double)*VariantGetInternalPtr<A>::get_ptr(left), (double)*VariantGetInternalPtr<B>::get_ptr(right))); + } + static void ptr_evaluate(const void *left, const void *right, void *r_ret) { + PtrToArg<R>::encode(R(Math::pow((double)PtrToArg<A>::convert(left), (double)PtrToArg<B>::convert(right))), r_ret); + } + static Variant::Type get_return_type() { return GetTypeInfo<R>::VARIANT_TYPE; } +}; + +template <class R, class A, class B> class OperatorEvaluatorXForm { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { |