barretenberg
Loading...
Searching...
No Matches
serialize.hpp
1#pragma once
2#include "polynomial.hpp"
3
4namespace barretenberg {
5
6// Highly optimized read / write of polynomials in little endian montgomery form.
7template <typename B> inline void read(B& buf, polynomial& p)
8{
9 uint32_t size;
10 serialize::read(buf, size);
11 p = polynomial(size);
12 memcpy(&p[0], buf, size * sizeof(fr));
13
14 if (!is_little_endian()) {
15 for (size_t i = 0; i < size; ++i) {
16 fr& c = p[i];
17 c.data[3] = __builtin_bswap64(c.data[3]);
18 c.data[2] = __builtin_bswap64(c.data[2]);
19 c.data[1] = __builtin_bswap64(c.data[1]);
20 c.data[0] = __builtin_bswap64(c.data[0]);
21 }
22 }
23 buf += size * sizeof(fr);
24}
25
26inline void write(uint8_t*& buf, polynomial const& p)
27{
28 auto size = p.size();
29 serialize::write(buf, static_cast<uint32_t>(size));
30 memcpy(&buf[0], &p[0], size * sizeof(fr));
31 buf += size * sizeof(fr);
32}
33
34inline void write(std::vector<uint8_t>& buf, polynomial const& p)
35{
36 auto size = p.size();
37 serialize::write(buf, static_cast<uint32_t>(size));
38 auto len = (size * sizeof(fr));
39 buf.resize(buf.size() + len);
40 auto ptr = &*buf.end() - len;
41 memcpy(ptr, &p[0], len);
42}
43
44inline void read(std::istream& is, polynomial& p)
45{
46 uint32_t size;
47 serialize::read(is, size);
48 p = polynomial(size);
49 is.read((char*)&p[0], (std::streamsize)(size * sizeof(fr)));
50
51 if (!is_little_endian()) {
52 for (size_t i = 0; i < size; ++i) {
53 fr& c = p[i];
54 c.data[3] = __builtin_bswap64(c.data[3]);
55 c.data[2] = __builtin_bswap64(c.data[2]);
56 c.data[1] = __builtin_bswap64(c.data[1]);
57 c.data[0] = __builtin_bswap64(c.data[0]);
58 }
59 }
60}
61
62inline void write(std::ostream& os, polynomial const& p)
63{
64 auto size = p.size();
65 auto len = size * sizeof(fr);
66 serialize::write(os, static_cast<uint32_t>(size));
67 os.write((char*)&p[0], (std::streamsize)len);
68}
69
70} // namespace barretenberg
constexpr_utils defines some helper methods that perform some stl-equivalent operations but in a cons...
Definition: constexpr_utils.hpp:16