mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-04-20 03:01:31 -04:00
73 lines
1.9 KiB
C++
73 lines
1.9 KiB
C++
/*
|
|
* Rectangle.h
|
|
*
|
|
*/
|
|
|
|
#ifndef OT_RECTANGLE_H_
|
|
#define OT_RECTANGLE_H_
|
|
|
|
#include "Tools/random.h"
|
|
#include "Tools/BitVector.h"
|
|
#include "Math/Z2k.h"
|
|
|
|
#define TAU(K, S) 2 * K + 4 * S
|
|
#define Y(K, S) X(TAU(K, S), K + S)
|
|
|
|
template <class U, class V>
|
|
class Rectangle
|
|
{
|
|
public:
|
|
typedef V RowType;
|
|
|
|
static const int N_ROWS = U::N_BITS;
|
|
static const int N_COLUMNS = V::N_BITS;
|
|
static const int N_ROW_BYTES = V::N_BYTES;
|
|
|
|
// make sure number of allocated rows matches the number of bytes
|
|
static const int N_ROWS_ALLOCATED = 8 * U::N_BYTES;
|
|
|
|
V rows[N_ROWS_ALLOCATED];
|
|
|
|
static size_t size() { return N_ROWS * RowType::size(); }
|
|
|
|
bool operator==(const Rectangle<U,V>& other) const;
|
|
bool operator!=(const Rectangle<U,V>& other) const
|
|
{ return not (*this == other); }
|
|
|
|
bool get_bit(int i, int j) { return rows[i].get_bit(j); }
|
|
|
|
Rectangle<U, V>& operator+=(const Rectangle<U, V>& other);
|
|
Rectangle<U, V> operator-(const Rectangle<U, V> & other);
|
|
|
|
Rectangle<U, V>& sub(Rectangle<U, V>& other) { return other.rsub_(*this); }
|
|
Rectangle<U, V>& rsub(Rectangle<U, V>& other) { return rsub_(other); }
|
|
Rectangle<U, V>& rsub_(Rectangle<U, V>& other);
|
|
Rectangle<U, V>& sub(const void* other) { return sub_(other); }
|
|
Rectangle<U, V>& sub_(const void* other);
|
|
|
|
void mul(const BitVector& a, const V& b);
|
|
|
|
void randomize(PRNG& G);
|
|
void randomize(int row, PRNG& G) { rows[row].randomize(G); }
|
|
void conditional_add(BitVector& conditions, Rectangle<U, V>& other,
|
|
int offset) { conditional_add_(conditions, other, offset); }
|
|
void conditional_add_(BitVector& conditions, Rectangle<U, V>& other,
|
|
int offset);
|
|
template <class T>
|
|
void to(T& result);
|
|
void to(Rectangle<U, V>& result) { result = *this; }
|
|
|
|
void pack(octetStream& o) const;
|
|
void unpack(octetStream& o);
|
|
|
|
void print(int i, int j);
|
|
};
|
|
|
|
template <int K, int L>
|
|
using Z2kRectangle = Rectangle<Z2<K>, Z2<L> >;
|
|
|
|
template <int K>
|
|
using Z2kSquare = Rectangle<Z2<K>, Z2<K>>;
|
|
|
|
#endif /* OT_RECTANGLE_H_ */
|