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
|
|
@ -10,14 +10,18 @@
|
|||
#include <limits>
|
||||
#include <type_traits>
|
||||
|
||||
#include "hedley/hedley.h"
|
||||
|
||||
namespace dpf
|
||||
{
|
||||
|
||||
/// Sentinel: deduce point-slot prefix from the key (`meta[I].prefix`).
|
||||
/// @brief Sentinel: deduce point-slot prefix from the key (`meta[I].prefix`).
|
||||
inline constexpr std::size_t prefix_deduce =
|
||||
std::numeric_limits<std::size_t>::max();
|
||||
|
||||
/// Point-output channel: slot `I`, optional prefix check `N`.
|
||||
/// @brief Point-output channel: slot `I`, optional prefix check `N`.
|
||||
/// @tparam I output index
|
||||
/// @tparam N prefix length, or `prefix_deduce`
|
||||
template <std::size_t I = 0, std::size_t N = prefix_deduce>
|
||||
struct out_t
|
||||
{
|
||||
|
|
@ -29,13 +33,14 @@ struct out_t
|
|||
template <std::size_t I = 0, std::size_t N = prefix_deduce>
|
||||
inline constexpr out_t<I, N> out{};
|
||||
|
||||
/// Comparison (DCF) channel.
|
||||
/// @brief Comparison (DCF) channel.
|
||||
struct cmp_t
|
||||
{
|
||||
};
|
||||
inline constexpr cmp_t cmp{};
|
||||
|
||||
/// Prefix of an `idcf` comparison. `L` is the number of leading bits.
|
||||
/// @brief Prefix of an `idcf` comparison. `L` is the number of leading bits.
|
||||
/// @tparam L number of leading bits
|
||||
template <std::size_t L>
|
||||
struct cmp_prefix_t
|
||||
{
|
||||
|
|
@ -74,7 +79,7 @@ template <typename T>
|
|||
inline constexpr bool is_cmp_prefix_target_v =
|
||||
is_cmp_prefix_target<std::decay_t<T>>::value;
|
||||
|
||||
/// True for channel tags that must not bind as the key in classic eval_*.
|
||||
/// @brief True for channel tags that must not bind as the key in classic eval_*.
|
||||
template <typename T>
|
||||
inline constexpr bool is_eval_channel_tag_v =
|
||||
is_out_v<T> || is_cmp_target_v<T> || is_cmp_prefix_target_v<T>;
|
||||
|
|
@ -83,12 +88,15 @@ template <typename T, typename = void>
|
|||
struct looks_like_dpf_key : std::false_type
|
||||
{
|
||||
};
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
template <typename T>
|
||||
struct looks_like_dpf_key<T,
|
||||
std::void_t<typename T::input_type, typename T::interior_node>>
|
||||
: std::true_type
|
||||
{
|
||||
};
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
template <typename T>
|
||||
inline constexpr bool looks_like_dpf_key_v =
|
||||
looks_like_dpf_key<std::decay_t<T>>::value;
|
||||
|
|
@ -107,12 +115,13 @@ template <typename T>
|
|||
inline constexpr bool is_incremental_dpf_key_v =
|
||||
is_incremental_dpf_key<std::decay_t<T>>::value;
|
||||
|
||||
/// True only for keys that must use the slot-aware (multi-level / comparison)
|
||||
/// @brief True only for keys that must use the slot-aware (multi-level / comparison)
|
||||
/// eval path. Every key now carries a `slot_meta` table (so
|
||||
/// `is_incremental_dpf_key_v` is true for all keys), but classic single-level
|
||||
/// equal-width keys keep using the classic `eval_*` fast paths; they set
|
||||
/// `is_multilevel == false`. Multi-level (`at<N>`) and comparison keys set it
|
||||
/// to true.
|
||||
/// @tparam T value type
|
||||
template <typename T, typename = void>
|
||||
struct is_multilevel_key : std::false_type
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue