所有权指针明确

This commit is contained in:
2026-08-28 13:33:17 +08:00
parent 0bc281b6b9
commit e07d16ea74
70 changed files with 1387 additions and 960 deletions
+19 -11
View File
@@ -19,7 +19,7 @@ std::unique_ptr<Object> build_object(Args&&... args) {
template <typename Scene, typename... Renderables>
std::unique_ptr<Scene> build_scene(Renderables*... renderables) {
typename Scene::template Builder<Scene> builder;
(builder.add_renderable(renderables), ...);
(builder.add_renderable(not_null{renderables}), ...);
auto result = builder.build();
if (!result) std::terminate();
return std::move(result).value();
@@ -35,8 +35,8 @@ template <typename Scene>
void render_once(Scene* scene) {
static std::uint64_t sequence{1};
Frame_2D frame{Frame_Identity{sequence++, 0}};
scene->set_frame_callback([](Frame_2D*) {});
EXPECT_TRUE(scene->render(&frame).has_value());
EXPECT_TRUE(scene->render(
&frame, [](not_null<Frame_2D*>) {}).has_value());
}
}
@@ -60,8 +60,10 @@ TEST(plottable_migration, curve_plots_share_partitioned_rendering) {
frequency->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 100.0});
power->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{-100.0, 0.0});
value->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 100.0});
auto trace = build_object<Trace>(time.get(), value.get(), 2u);
auto sweep = build_object<Sweep>(frequency.get(), power.get(), 2u);
auto trace = build_object<Trace>(not_null{time.get()},
not_null{value.get()}, 2u);
auto sweep = build_object<Sweep>(not_null{frequency.get()},
not_null{power.get()}, 2u);
trace->submit_stream<Frequency_Trace_Stream_Tag>(
Frequency_Trace_Sample{time->append_time({1'000}), 10.0});
trace->submit_stream<Frequency_Trace_Stream_Tag>(
@@ -120,9 +122,11 @@ TEST(plottable_migration, raster_plots_share_partitioned_color_blocks) {
configure_axis(time.get(), Axis_Orientation::vertical, {20.0, 100.0}, -80.0, canvas);
frequency->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 100.0});
power->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{-100.0, 0.0});
auto glow = build_object<Glow>(frequency.get(), power.get(),
auto glow = build_object<Glow>(not_null{frequency.get()},
not_null{power.get()},
Plot_Partition_Grid{2, 2});
auto waterfall = build_object<Fall>(frequency.get(), time.get(),
auto waterfall = build_object<Fall>(not_null{frequency.get()},
not_null{time.get()},
Plot_Partition_Grid{2, 2});
glow->set<&Afterglow::Prop::frequency_range>(Axis_Range{0.0, 100.0});
glow->set<&Afterglow::Prop::power_range>(Axis_Range{-100.0, 0.0});
@@ -172,8 +176,10 @@ TEST(plottable_migration, direct_overlay_and_constellation_build_and_render) {
configure_axis(vertical.get(), Axis_Orientation::vertical, {20.0, 100.0}, -80.0, canvas);
horizontal->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{-1.0, 1.0});
vertical->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{-1.0, 1.0});
auto diagram = build_object<Diagram>(horizontal.get(), vertical.get(), 2u);
auto overlay = build_object<Overlay>(horizontal.get(), vertical.get());
auto diagram = build_object<Diagram>(not_null{horizontal.get()},
not_null{vertical.get()}, 2u);
auto overlay = build_object<Overlay>(not_null{horizontal.get()},
not_null{vertical.get()});
diagram->set<&Constellation_Diagram::Prop::i_range>(Axis_Range{-1.0, 1.0});
diagram->set<&Constellation_Diagram::Prop::q_range>(Axis_Range{-1.0, 1.0});
diagram->submit_stream<Constellation_Stream_Tag>(
@@ -199,7 +205,8 @@ TEST(selection_overlay, control_extends_selection_and_plain_click_clears_it) {
configure_axis(vertical.get(), Axis_Orientation::vertical, {20.0, 100.0}, -80.0, canvas);
horizontal->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 100.0});
vertical->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 100.0});
auto overlay = build_object<Overlay>(horizontal.get(), vertical.get());
auto overlay = build_object<Overlay>(not_null{horizontal.get()},
not_null{vertical.get()});
auto scene = build_scene<Scene>(overlay.get());
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
scene->activate_view();
@@ -246,7 +253,8 @@ TEST(selection_overlay, time_axis_selection_keeps_axis_coordinates_while_window_
time->append_time({1'000});
time->append_time({2'000});
time->append_time({3'000});
auto overlay = build_object<Overlay>(time.get(), value.get());
auto overlay = build_object<Overlay>(not_null{time.get()},
not_null{value.get()});
auto scene = build_scene<Scene>(overlay.get());
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
scene->activate_view();