From a1df90fa7b7daf76469bd5e691910c74d92bf802 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Thu, 3 Sep 2015 15:02:02 +0300 Subject: [PATCH] Add operator% for uint160 and uint256. --- Novacoin/uint160.cs | 21 ++++++++++++++++++--- Novacoin/uint256.cs | 21 ++++++++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/Novacoin/uint160.cs b/Novacoin/uint160.cs index cdf633a..be4d918 100644 --- a/Novacoin/uint160.cs +++ b/Novacoin/uint160.cs @@ -194,7 +194,7 @@ namespace Novacoin return a; } - public static uint160 operator /(uint160 a, uint b) + public static uint160 operator /(uint160 a, uint divisor) { var result = new uint160(); @@ -205,13 +205,28 @@ namespace Novacoin { r <<= 32; r |= a.pn[i]; - result.pn[i] = (uint)(r / b); - r %= b; + result.pn[i] = (uint)(r / divisor); + r %= divisor; } return result; } + public static uint operator %(uint160 a, uint divisor) + { + ulong r = 0; + int i = a.nWidth; + + while (i-- > 0) + { + r <<= 32; + r |= a.pn[i]; + r %= divisor; + } + + return (uint)r; + } + #endregion #region Shift diff --git a/Novacoin/uint256.cs b/Novacoin/uint256.cs index 60e570d..7ab69d8 100644 --- a/Novacoin/uint256.cs +++ b/Novacoin/uint256.cs @@ -251,7 +251,7 @@ namespace Novacoin return a - new uint256(b); } - public static uint256 operator /(uint256 a, uint b) + public static uint256 operator /(uint256 a, uint divisor) { var result = new uint256(); @@ -262,12 +262,27 @@ namespace Novacoin { r <<= 32; r |= a.pn[i]; - result.pn[i] = (uint)(r / b); - r %= b; + result.pn[i] = (uint)(r / divisor); + r %= divisor; } return result; } + + public static uint operator %(uint256 a, uint divisor) + { + ulong r = 0; + int i = a.nWidth; + + while (i-- > 0) + { + r <<= 32; + r |= a.pn[i]; + r %= divisor; + } + + return (uint)r; + } #endregion #region Shift -- 1.7.1