Toggle navigation
=nil;
Foundation
=nil;
Crypto3
=nil;
Crypto3 Cryptography Suite 0.3.0
libs
hash
include
nil
crypto3
detail
static_pow.hpp
Go to the documentation of this file.
1
//---------------------------------------------------------------------------//
2
// Copyright (c) 2021 Mikhail Komarov <nemo@nil.foundation>
3
// Copyright (c) 2021 Ilias Khairullin <ilias@nil.foundation>
4
//
5
// MIT License
6
//
7
// Permission is hereby granted, free of charge, to any person obtaining a copy
8
// of this software and associated documentation files (the "Software"), to deal
9
// in the Software without restriction, including without limitation the rights
10
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
// copies of the Software, and to permit persons to whom the Software is
12
// furnished to do so, subject to the following conditions:
13
//
14
// The above copyright notice and this permission notice shall be included in all
15
// copies or substantial portions of the Software.
16
//
17
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
// SOFTWARE.
24
25
#ifndef CRYPTO3_DETAIL_STATIC_POW_HPP
26
#define CRYPTO3_DETAIL_STATIC_POW_HPP
27
28
namespace
nil
{
29
namespace
crypto3 {
30
namespace
detail {
31
template
<
typename
T,
typename
U>
32
constexpr T
pow
(T x, U n) {
33
T result = 1;
34
while
(n > 0) {
35
if
(n % 2 == 0) {
36
// n is even
37
x = x * x;
38
n = n / 2;
39
}
else
{
40
// n isn't even
41
result = result * x;
42
n = n - 1;
43
}
44
}
45
return
result;
46
}
47
}
// namespace detail
48
}
// namespace crypto3
49
}
// namespace nil
50
51
#endif
// #ifndef CRYPTO3_DETAIL_STATIC_POW_HPP
nil::crypto3::detail::pow
constexpr T pow(T x, U n)
Definition:
static_pow.hpp:32
nil
Definition:
pair.hpp:31