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
|
|
@ -285,8 +285,10 @@ struct pointer_facade
|
|||
|
||||
} // namespace detail
|
||||
|
||||
/// One level. The buffer is traversed in the opposite direction on
|
||||
/// @brief One level. The buffer is traversed in the opposite direction on
|
||||
/// alternate levels.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @tparam Allocator allocator type
|
||||
template <typename DpfKey,
|
||||
typename Allocator = aligned_allocator<typename DpfKey::interior_node>>
|
||||
struct inplace_reversing_sequence_memoizer final
|
||||
|
|
@ -381,18 +383,20 @@ HEDLEY_PRAGMA(GCC diagnostic pop)
|
|||
unique_ptr buf;
|
||||
};
|
||||
|
||||
/// Two levels, so a level can be built while the previous level is still
|
||||
/// @brief Two levels, so a level can be built while the previous level is still
|
||||
/// intact. Default workspace for `eval_sequence` on a recipe.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @tparam Allocator allocator type
|
||||
template <typename DpfKey,
|
||||
typename Allocator = aligned_allocator<typename DpfKey::interior_node>>
|
||||
struct double_space_sequence_memoizer final
|
||||
: public sequence_recipe_memoizer_base<DpfKey>
|
||||
{
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
private:
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
using parent = sequence_recipe_memoizer_base<DpfKey>;
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
public:
|
||||
using unique_ptr = typename Allocator::unique_ptr;
|
||||
using return_type = typename DpfKey::interior_node *;
|
||||
|
|
@ -435,17 +439,19 @@ HEDLEY_PRAGMA(GCC diagnostic pop)
|
|||
unique_ptr buf;
|
||||
};
|
||||
|
||||
/// Every level of the recipe's traversal.
|
||||
/// @brief Every level of the recipe's traversal.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @tparam Allocator allocator type
|
||||
template <typename DpfKey,
|
||||
typename Allocator = aligned_allocator<typename DpfKey::interior_node>>
|
||||
struct full_tree_sequence_memoizer final
|
||||
: public sequence_recipe_memoizer_base<DpfKey>
|
||||
{
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
private:
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
using parent = sequence_recipe_memoizer_base<DpfKey>;
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
public:
|
||||
using unique_ptr = typename Allocator::unique_ptr;
|
||||
using return_type = typename DpfKey::interior_node *;
|
||||
|
|
@ -502,10 +508,12 @@ auto make_sequence_memoizer(const sequence_recipe & recipe)
|
|||
|
||||
HEDLEY_PRAGMA(GCC diagnostic push)
|
||||
HEDLEY_PRAGMA(GCC diagnostic ignored "-Wignored-attributes")
|
||||
/// One-level sequence workspace bound to `recipe`.
|
||||
/// @brief One-level sequence workspace bound to `recipe`.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @param recipe The object later passed to `eval_sequence`. The memoizer
|
||||
/// holds a reference to it.
|
||||
/// @snippet evaluation/memoizers.cpp sequence-memoizer
|
||||
/// @return One-level sequence workspace bound to `recipe`
|
||||
template <typename DpfKey>
|
||||
inline auto make_inplace_reversing_sequence_memoizer(const sequence_recipe & recipe)
|
||||
{
|
||||
|
|
@ -519,8 +527,11 @@ inline auto make_inplace_reversing_sequence_memoizer(const DpfKey &, const seque
|
|||
return make_inplace_reversing_sequence_memoizer<DpfKey>(recipe);
|
||||
}
|
||||
|
||||
/// Two-level sequence workspace bound to `recipe`.
|
||||
/// @brief Two-level sequence workspace bound to `recipe`.
|
||||
/// @snippet evaluation/eval_sequence.cpp eval-sequence-recipe
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @param recipe the sequence recipe the memoizer was built from
|
||||
/// @return Two-level sequence workspace bound to `recipe`
|
||||
template <typename DpfKey>
|
||||
inline auto make_double_space_sequence_memoizer(const sequence_recipe & recipe)
|
||||
{
|
||||
|
|
@ -534,20 +545,23 @@ inline auto make_double_space_sequence_memoizer(const DpfKey &, const sequence_r
|
|||
return make_double_space_sequence_memoizer<DpfKey>(recipe);
|
||||
}
|
||||
|
||||
/// Full-tree sequence workspace bound to `recipe`.
|
||||
/// @brief Full-tree sequence workspace bound to `recipe`.
|
||||
/// @tparam DpfKey DPF key type
|
||||
/// @param recipe the sequence recipe the memoizer was built from
|
||||
/// @return Full-tree sequence workspace bound to `recipe`
|
||||
template <typename DpfKey>
|
||||
inline auto make_full_tree_sequence_memoizer(const sequence_recipe & recipe)
|
||||
{
|
||||
using key_t = unwrap_party_key_t<DpfKey>;
|
||||
return detail::make_sequence_memoizer<full_tree_sequence_memoizer<key_t>>(recipe);
|
||||
}
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
|
||||
template <typename DpfKey>
|
||||
inline auto make_full_tree_sequence_memoizer(const DpfKey &, const sequence_recipe & recipe)
|
||||
{
|
||||
return make_full_tree_sequence_memoizer<DpfKey>(recipe);
|
||||
}
|
||||
HEDLEY_PRAGMA(GCC diagnostic pop)
|
||||
|
||||
} // namespace dpf
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue