Document the new DPF surfaces in one command set, and test the field, half-tree, and multipoint edges.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
0d8a5a8131
commit
0dff6df8ed
250 changed files with 12199 additions and 1981 deletions
|
|
@ -41,8 +41,10 @@
|
|||
namespace dpf
|
||||
{
|
||||
|
||||
/// Buffer element type for leaf eval of `KeyT`: party-tagged subtractive
|
||||
/// @brief Buffer element type for leaf eval of `KeyT`: party-tagged subtractive
|
||||
/// share when `KeyT` is a `party_key`, otherwise the concrete output.
|
||||
/// @tparam KeyT key type
|
||||
/// @tparam OutputT output type
|
||||
template <typename KeyT, typename OutputT, bool = is_party_key_v<KeyT>>
|
||||
struct leaf_buffer_elem
|
||||
{
|
||||
|
|
@ -56,7 +58,9 @@ struct leaf_buffer_elem<KeyT, OutputT, true>
|
|||
template <typename KeyT, typename OutputT>
|
||||
using leaf_buffer_elem_t = typename leaf_buffer_elem<KeyT, OutputT>::type;
|
||||
|
||||
/// Buffer element type for comparison eval of `KeyT`.
|
||||
/// @brief Buffer element type for comparison eval of `KeyT`.
|
||||
/// @tparam KeyT key type
|
||||
/// @tparam Beta payload type
|
||||
template <typename KeyT, typename Beta, bool = is_party_key_v<KeyT>>
|
||||
struct cmp_buffer_elem
|
||||
{
|
||||
|
|
@ -70,9 +74,11 @@ struct cmp_buffer_elem<KeyT, Beta, true>
|
|||
template <typename KeyT, typename Beta>
|
||||
using cmp_buffer_elem_t = typename cmp_buffer_elem<KeyT, Beta>::type;
|
||||
|
||||
/// `std::vector(n)` value-initializes every slot. Interval / full eval
|
||||
/// @brief `std::vector(n)` value-initializes every slot. Interval / full eval
|
||||
/// overwrites the whole buffer, so skip default-construction for trivial
|
||||
/// `T`. Non-trivial outputs still run their default constructor.
|
||||
/// @tparam T value type
|
||||
/// @tparam Alignment allocation alignment
|
||||
template <typename T,
|
||||
std::size_t Alignment>
|
||||
class output_buffer_allocator : public aligned_allocator<T, Alignment>
|
||||
|
|
@ -139,8 +145,10 @@ constexpr bool operator!=(const output_buffer_allocator<T, A> & lhs,
|
|||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
/// Move-only vector of `T`. Copy construction and copy assignment are
|
||||
/// @brief Move-only vector of `T`. Copy construction and copy assignment are
|
||||
/// deleted. `at`, `operator[]`, `data`, iterators, and `size` are public.
|
||||
/// @tparam T value type
|
||||
/// @tparam Alignment allocation alignment
|
||||
template <typename T,
|
||||
std::size_t Alignment = utils::max_align_v>
|
||||
class output_buffer final
|
||||
|
|
@ -252,7 +260,7 @@ LIBDPF_PACKED_SHARE_BUFFER(dpf::nyble, 0);
|
|||
LIBDPF_PACKED_SHARE_BUFFER(dpf::nyble, 1);
|
||||
#undef LIBDPF_PACKED_SHARE_BUFFER
|
||||
|
||||
/// Packed bit share buffers reuse the bit-array image; iterators yield shares.
|
||||
/// @brief Packed bit share buffers reuse the bit-array image; iterators yield shares.
|
||||
#define LIBDPF_BIT_SHARE_BUFFER(PARTY) \
|
||||
template <> \
|
||||
class output_buffer<subtractive_share<dpf::bit, PARTY>> \
|
||||
|
|
@ -272,8 +280,14 @@ LIBDPF_BIT_SHARE_BUFFER(0);
|
|||
LIBDPF_BIT_SHARE_BUFFER(1);
|
||||
#undef LIBDPF_BIT_SHARE_BUFFER
|
||||
|
||||
/// Buffer sized for the closed interval `[from, to]` of output `I`.
|
||||
/// On a `party_key`, elements are subtractive shares of that output.
|
||||
/// @brief Buffer sized for the closed interval `[from, to]` of output `I`.
|
||||
/// @details On a `party_key`, elements are subtractive shares of that output.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @tparam I output index
|
||||
/// @tparam InputT input domain type
|
||||
/// @param from the inclusive start of the range
|
||||
/// @param to the `to`
|
||||
/// @return Buffer sized for the closed interval `[from, to]` of output `I`
|
||||
template <typename DpfKey,
|
||||
std::size_t I = 0,
|
||||
typename InputT>
|
||||
|
|
@ -318,7 +332,10 @@ inline auto make_output_buffer_for_interval(const DpfKey &, InputT from, InputT
|
|||
return make_output_buffer_for_interval<DpfKey, I0, I1, Is...>(from, to);
|
||||
}
|
||||
|
||||
/// Buffer sized for every input of output `I`.
|
||||
/// @brief Buffer sized for every input of output `I`.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @tparam I output index
|
||||
/// @return Buffer sized for every input of output `I`
|
||||
template <typename DpfKey,
|
||||
std::size_t I = 0>
|
||||
auto make_output_buffer_for_full()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue