2#include "polynomial.hpp"
7template <
typename B>
inline void read(B& buf, polynomial& p)
10 serialize::read(buf, size);
12 memcpy(&p[0], buf, size *
sizeof(
fr));
14 if (!is_little_endian()) {
15 for (
size_t i = 0; i < size; ++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]);
23 buf += size *
sizeof(
fr);
26inline void write(uint8_t*& buf, polynomial
const& p)
29 serialize::write(buf,
static_cast<uint32_t
>(size));
30 memcpy(&buf[0], &p[0], size *
sizeof(
fr));
31 buf += size *
sizeof(
fr);
34inline void write(std::vector<uint8_t>& buf, polynomial
const& p)
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);
44inline void read(std::istream& is, polynomial& p)
47 serialize::read(is, size);
49 is.read((
char*)&p[0], (std::streamsize)(size *
sizeof(
fr)));
51 if (!is_little_endian()) {
52 for (
size_t i = 0; i < size; ++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]);
62inline void write(std::ostream& os, polynomial
const& p)
65 auto len = size *
sizeof(
fr);
66 serialize::write(os,
static_cast<uint32_t
>(size));
67 os.write((
char*)&p[0], (std::streamsize)len);
constexpr_utils defines some helper methods that perform some stl-equivalent operations but in a cons...
Definition: constexpr_utils.hpp:16