template<int in_bits, typename Group, typename Prg, typename In = uint,
DcfPred pred = DcfPred::kLt, int par_depth = -1>
requires ((std::is_unsigned_v<In> || std::is_same_v<In, __uint128_t>) && in_bits <= sizeof(In) * 8 &&
Groupable<Group> &&
Prgable<Prg, 4>)
class fss::Dcf< in_bits, Group, Prg, In, pred, par_depth >
2-party DCF scheme.
- Template Parameters
-
| in_bits | Input domain bit size. |
| Group | Type for the output domain. See Groupable. |
| Prg | See Prgable. |
| In | Type for the input domain. From uint8_t to __uint128_t. |
| pred | See DcfPred. |
| par_depth | -1 is to use ceil(log(num of threads)), which should be good enough. Only EvalAll() uses it. See EvalAll() for details. |
template<int in_bits, typename Group , typename Prg , typename In = uint,
DcfPred pred = DcfPred::kLt, int par_depth = -1>
| void fss::Dcf< in_bits, Group, Prg, In, pred, par_depth >::EvalAll |
( |
bool |
b, |
|
|
int4 |
s0, |
|
|
const Cw |
cws[], |
|
|
int4 |
ys[] |
|
) |
| |
|
inline |
Full domain evaluation method.
Evaluate the key on each input, i.e., 0b00...0 - 0b11...1. Store the outputs sequentially.
b, s0, cws are the same as the ones in Eval().
- Parameters
-
| ys | Pre-allocated output array. Its size must be at least 2 ** in_bits. |
Support parallel using OpenMP. The task is divided to 2 ** par_depth parallel sub-tasks with the equal workloads. par_depth = -1: use ceil(log(num of threads)). par_depth = 0: no parallelism, i.e., sequential execution.