所有权指针明确
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user