所有权指针明确

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
+13 -9
View File
@@ -15,14 +15,14 @@ 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();
}
bool contains_color(Image_View view) {
for (int y = 0; y < view.height; ++y) {
const auto* row = reinterpret_cast<const Pixel*>(view.data + static_cast<std::ptrdiff_t>(y) * view.stride);
const auto* row = reinterpret_cast<const Pixel*>(view.data.data() + static_cast<std::ptrdiff_t>(y) * view.stride);
for (int x = 0; x < view.width; ++x)
if (row[x] != 0) return true;
}
@@ -31,7 +31,7 @@ bool contains_color(Image_View view) {
std::uint64_t image_hash(Image_View view) {
std::uint64_t value{1469598103934665603ULL};
for (int y = 0; y < view.height; ++y) {
const auto* row = reinterpret_cast<const std::byte*>(view.data) +
const auto* row = view.data.data() +
static_cast<std::ptrdiff_t>(y) * view.stride;
for (std::ptrdiff_t index = 0;
index < static_cast<std::ptrdiff_t>(view.width * sizeof(Pixel));
@@ -46,8 +46,8 @@ template <typename Scene>
std::unique_ptr<Frame_2D> render_frame(Scene* scene) {
static std::uint64_t sequence{1};
auto frame = std::make_unique<Frame_2D>(Frame_Identity{sequence++, 0});
scene->set_frame_callback([](Frame_2D*) {});
EXPECT_TRUE(scene->render(frame.get()).has_value());
EXPECT_TRUE(scene->render(
frame.get(), [](not_null<Frame_2D*>) {}).has_value());
return frame;
}
}
@@ -58,7 +58,8 @@ TEST(spectrum_data, publishes_samples_through_tagged_frame_buffer) {
using Scene_Object = Render_Scene_2D;
auto frequency = build_object<Frequency>();
auto power = build_object<Power>();
auto spectrum = build_object<Object>(frequency.get(), power.get());
auto spectrum = build_object<Object>(not_null{frequency.get()},
not_null{power.get()});
spectrum->set<&Spectrum::Prop::frequency_range>(Axis_Range{0.0, 100.0});
const double samples[]{-100.0, -50.0, 0.0};
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
@@ -75,7 +76,8 @@ TEST(spectrum_markers, uses_tagged_properties_as_the_only_marker_interface) {
using Scene_Object = Render_Scene_2D;
auto frequency = build_object<Frequency>();
auto power = build_object<Power>();
auto spectrum = build_object<Object>(frequency.get(), power.get());
auto spectrum = build_object<Object>(not_null{frequency.get()},
not_null{power.get()});
spectrum->set<&Spectrum::Prop::custom_markers>(
std::vector<Spectrum_Frequency>{10.0, 20.0});
spectrum->advance();
@@ -110,7 +112,8 @@ TEST(render_scene_2d, composites_axes_and_spectrum_into_final_frame) {
initialize_runtime({.workers = 2});
auto frequency = build_object<Frequency>();
auto power = build_object<Power>();
auto spectrum = build_object<Spectrum_Object>(frequency.get(), power.get(), 3u);
auto spectrum = build_object<Spectrum_Object>(not_null{frequency.get()},
not_null{power.get()}, 3u);
auto scene = build_scene<Scene_Object>(spectrum.get());
const Size canvas{160, 120};
frequency->set<&Abs_Axis::Prop::position>(Point_F{20.0, 100.0});
@@ -188,7 +191,8 @@ TEST(spectrum_data, repeatedly_publishes_new_samples_during_long_running_render)
initialize_runtime({.workers = 4});
auto frequency = build_object<Frequency>();
auto power = build_object<Power>();
auto spectrum = build_object<Spectrum_Object>(frequency.get(), power.get());
auto spectrum = build_object<Spectrum_Object>(not_null{frequency.get()},
not_null{power.get()});
auto scene = build_scene<Scene_Object>(spectrum.get());
frequency->set<&Abs_Axis::Prop::position>(Point_F{20.0, 100.0});
frequency->set<&Abs_Axis::Prop::pixel_length>(120.0);