summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/tanya/math/mp.d23
1 files changed, 14 insertions, 9 deletions
diff --git a/source/tanya/math/mp.d b/source/tanya/math/mp.d
index 2d06f8a..5c89c6b 100644
--- a/source/tanya/math/mp.d
+++ b/source/tanya/math/mp.d
@@ -993,18 +993,12 @@ struct Integer
/// Ditto.
Integer opBinary(string op)(in size_t n) nothrow @safe @nogc
- if (op == "<<" || op == ">>")
+ if (op == "<<" || op == ">>" || op == "+" || op == "-" || op == "/"
+ || op == "*" || op == "^^" || op == "%")
{
checkAllocator();
auto ret = Integer(this, allocator);
- static if (op == "<<")
- {
- ret <<= n;
- }
- else
- {
- ret >>= n;
- }
+ mixin("ret " ~ op ~ "= n;");
return ret;
}
@@ -1018,4 +1012,15 @@ struct Integer
h2 = h1 >> 1;
assert(cast(long) h2 == 212);
}
+
+ /// Ditto.
+ Integer opBinary(string op)(in Integer h) nothrow @safe @nogc
+ if (op == "+" || op == "-" || op == "/"
+ || op == "*" || op == "^^" || op == "%")
+ {
+ checkAllocator();
+ auto ret = Integer(this, allocator);
+ mixin("ret " ~ op ~ "= h;");
+ return ret;
+ }
}