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:
Ryan Henry 2026-09-24 23:18:10 -06:00
parent 0d8a5a8131
commit 0dff6df8ed
250 changed files with 12199 additions and 1981 deletions

View file

@ -26,7 +26,7 @@
namespace dpf
{
/// Steps, leaf count, and per-level endpoints for one sorted point list.
/// @brief Steps, leaf count, and per-level endpoints for one sorted point list.
struct sequence_recipe
{
public:
@ -52,7 +52,8 @@ struct sequence_recipe
HEDLEY_PURE
HEDLEY_NO_THROW
constexpr const std::vector<std::size_t> & level_endpoints() const noexcept { return level_endpoints_; }
/// `level_endpoints().size() - 1`. Not `constexpr`: `std::vector::size` is not a constant expression in C++17.
/// @brief `level_endpoints().size() - 1`. Not `constexpr`: `std::vector::size` is not a constant expression in C++17.
/// @return `level_endpoints().size() - 1`
HEDLEY_PURE
HEDLEY_NO_THROW
std::size_t depth() const noexcept { return level_endpoints_.size()-1; }
@ -139,9 +140,13 @@ auto make_sequence_recipe(ForwardIterator begin, ForwardIterator end)
} // namespace detail
/// Compile `[begin, end)` into a recipe for `DpfKey`'s input type.
/// @brief Compile `[begin, end)` into a recipe for `DpfKey`'s input type.
/// @tparam DpfKey Key type, or a `party_key` of that key. Only the input
/// type and depth are used.
/// @tparam ForwardIterator forward iterator type
/// @param begin the iterator to the first query
/// @param end the iterator past the last query
/// @return Compile `[begin, end)` into a recipe for `DpfKey`'s input type
/// @throws std::runtime_error if the range is not sorted nondecreasing.
template <typename DpfKey,
typename ForwardIterator>
@ -157,8 +162,17 @@ auto make_sequence_recipe(const DpfKey &, ForwardIterator begin, ForwardIterator
return make_sequence_recipe<DpfKey>(begin, end);
}
/// Build a sequence recipe that stops at `StopLevel` with packing `LgOpl`
/// @brief Build a sequence recipe that stops at `StopLevel` with packing `LgOpl`
/// (multi-level / `out<I>` slots). Lane points are in the slot's prefix domain.
/// @tparam StopLevel stop level
/// @tparam LgOpl lg opl
/// @tparam InputT input domain type
/// @tparam ForwardIterator forward iterator type
/// @param msb_mask the `msb_mask`
/// @param begin the iterator to the first query
/// @param end the iterator past the last query
/// @return the constructed object
/// @throws std::runtime_error if `list must be sorted`
template <std::size_t StopLevel, std::size_t LgOpl, typename InputT,
typename ForwardIterator>
auto make_sequence_recipe_at(InputT msb_mask, ForwardIterator begin,