arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/spqlios/lib/test/testlib/zn_layouts.h
spqlios/lib/test/testlib/zn_layouts.hRaw
 1#ifndef SPQLIOS_EXT_ZN_LAYOUTS_H
 2#define SPQLIOS_EXT_ZN_LAYOUTS_H
 3
 4#include "../../spqlios/arithmetic/zn_arithmetic.h"
 5#include "test_commons.h"
 6
 7class zn32_pmat_layout {
 8 public:
 9  const uint64_t nrows;
10  const uint64_t ncols;
11  ZN32_VMP_PMAT* const data;
12  zn32_pmat_layout(uint64_t nrows, uint64_t ncols);
13
14 private:
15  int32_t* get_addr(uint64_t row, uint64_t col) const;
16
17 public:
18  int32_t get(uint64_t row, uint64_t col) const;
19  int32_t get_zext(uint64_t row, uint64_t col) const;
20  void set(uint64_t row, uint64_t col, int32_t value);
21  void fill_random();
22  thash content_hash() const;
23  ~zn32_pmat_layout();
24};
25
26template <typename T>
27std::vector<int32_t> vmp_product(const T* vec, uint64_t vec_size, uint64_t out_size, const zn32_pmat_layout& mat);
28
29#endif  // SPQLIOS_EXT_ZN_LAYOUTS_H