]> Git Repo - VerusCoin.git/blob - src/snark/libsnark/common/utils.cpp
dd114fdf0d58ad4f909ba3aeb45ed7ac78d24811
[VerusCoin.git] / src / snark / libsnark / common / utils.cpp
1 /** @file
2  *****************************************************************************
3  Implementation of misc math and serialization utility functions
4  *****************************************************************************
5  * @author     This file is part of libsnark, developed by SCIPR Lab
6  *             and contributors (see AUTHORS).
7  * @copyright  MIT license (see LICENSE file)
8  *****************************************************************************/
9
10 #include <algorithm>
11 #include <cassert>
12 #include <cstdint>
13 #include <cstdarg>
14 #include "common/utils.hpp"
15
16 namespace libsnark {
17
18 size_t log2(size_t n)
19 /* returns ceil(log2(n)), so 1ul<<log2(n) is the smallest power of 2,
20    that is not less than n. */
21 {
22     size_t r = ((n & (n-1)) == 0 ? 0 : 1); // add 1 if n is not power of 2
23
24     while (n > 1)
25     {
26         n >>= 1;
27         r++;
28     }
29
30     return r;
31 }
32
33 size_t bitreverse(size_t n, const size_t l)
34 {
35     size_t r = 0;
36     for (size_t k = 0; k < l; ++k)
37     {
38         r = (r << 1) | (n & 1);
39         n >>= 1;
40     }
41     return r;
42 }
43
44 bit_vector int_list_to_bits(const std::initializer_list<unsigned long> &l, const size_t wordsize)
45 {
46     bit_vector res(wordsize*l.size());
47     for (size_t i = 0; i < l.size(); ++i)
48     {
49         for (size_t j = 0; j < wordsize; ++j)
50         {
51             res[i*wordsize + j] = (*(l.begin()+i) & (1ul<<(wordsize-1-j)));
52         }
53     }
54     return res;
55 }
56
57 long long div_ceil(long long x, long long y)
58 {
59     return (x + (y-1)) / y;
60 }
61
62 bool is_little_endian()
63 {
64     uint64_t a = 0x12345678;
65     unsigned char *c = (unsigned char*)(&a);
66     return (*c = 0x78);
67 }
68
69 std::string FORMAT(const std::string &prefix, const char* format, ...)
70 {
71     const static size_t MAX_FMT = 256;
72     char buf[MAX_FMT];
73     va_list args;
74     va_start(args, format);
75     vsnprintf(buf, MAX_FMT, format, args);
76     va_end(args);
77
78     return prefix + std::string(buf);
79 }
80
81 void serialize_bit_vector(std::ostream &out, const bit_vector &v)
82 {
83     out << v.size() << "\n";
84     for (size_t i = 0; i < v.size(); ++i)
85     {
86         out << v[i] << "\n";
87     }
88 }
89
90 void deserialize_bit_vector(std::istream &in, bit_vector &v)
91 {
92     size_t size;
93     in >> size;
94     v.resize(size);
95     for (size_t i = 0; i < size; ++i)
96     {
97         bool b;
98         in >> b;
99         v[i] = b;
100     }
101 }
102 } // libsnark
This page took 0.019462 seconds and 2 git commands to generate.