From 0ee9c0b8e6f1d751a09828b74ac3da3c88a341f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 5 Apr 2025 20:29:42 +0200 Subject: [PATCH] Prefer member slicing instead of arrayCast() in various other places. --- doc/generated/atlas.cpp | 4 ++-- doc/snippets/Animation.cpp | 8 ++++---- doc/snippets/Trade.cpp | 9 +++------ src/Magnum/Animation/Test/TrackViewTest.cpp | 2 +- src/Magnum/SceneTools/Test/CombineTest.cpp | 6 +++--- src/Magnum/SceneTools/Test/FilterTest.cpp | 2 +- src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp | 2 +- src/Magnum/TextureTools/Test/AtlasBenchmark.cpp | 8 ++++---- 8 files changed, 19 insertions(+), 22 deletions(-) diff --git a/doc/generated/atlas.cpp b/doc/generated/atlas.cpp index a9024c2d4..f3bba922d 100644 --- a/doc/generated/atlas.cpp +++ b/doc/generated/atlas.cpp @@ -130,8 +130,8 @@ int main() { auto sizes16 = Containers::arrayCast(*sizeData); Containers::Array sizes{NoInit, sizes16.size()}; Math::castInto( - Containers::arrayCast<2, const Short>(stridedArrayView(sizes16)), - Containers::arrayCast<2, Int>(stridedArrayView(sizes))); + stridedArrayView(sizes16).slice(&Vector2s::data), + stridedArrayView(sizes).slice(&Vector2i::data)); TextureTools::AtlasLandfill atlas{{512, 512}}; Containers::Array offsets{NoInit, sizes.size()}; diff --git a/doc/snippets/Animation.cpp b/doc/snippets/Animation.cpp index d50fd0574..780a780cf 100644 --- a/doc/snippets/Animation.cpp +++ b/doc/snippets/Animation.cpp @@ -337,12 +337,12 @@ const Keyframe data[]{ }; Animation::TrackView positions{ - {data, &data[0].time, Containers::arraySize(data), sizeof(Keyframe)}, - {data, &data[0].position, Containers::arraySize(data), sizeof(Keyframe)}, + Containers::stridedArrayView(data).slice(&Keyframe::time), + Containers::stridedArrayView(data).slice(&Keyframe::position), Math::lerp}; Animation::TrackView rotations{ - {data, &data[0].time, Containers::arraySize(data), sizeof(Keyframe)}, - {data, &data[0].rotation, Containers::arraySize(data), sizeof(Keyframe)}, + Containers::stridedArrayView(data).slice(&Keyframe::time), + Containers::stridedArrayView(data).slice(&Keyframe::rotation), Math::lerp}; Float time = 2.2f; diff --git a/doc/snippets/Trade.cpp b/doc/snippets/Trade.cpp index 4bcd35770..878c66016 100644 --- a/doc/snippets/Trade.cpp +++ b/doc/snippets/Trade.cpp @@ -1006,13 +1006,10 @@ auto faces = Containers::arrayCast(vertexData); Trade::MeshData data{MeshPrimitive::Faces, std::move(vertexData), { Trade::MeshAttributeData{TriangleIds, - Containers::StridedArrayView2D{faces, - &faces[0].triangleIds[0], - {faces.size(), 15}, - {sizeof(Face), sizeof(UnsignedShort)}}}, + Containers::StridedArrayView2D{ + stridedArrayView(faces).slice(&Face::triangleIds)}}, Trade::MeshAttributeData{TriangleCount, - Containers::StridedArrayView1D{faces, - &faces[0].triangleCount, faces.size(), sizeof(Face)}} + stridedArrayView(faces).slice(&Face::triangleCount)} }}; /* [MeshData-populating-custom] */ diff --git a/src/Magnum/Animation/Test/TrackViewTest.cpp b/src/Magnum/Animation/Test/TrackViewTest.cpp index 3bbb28482..00dcebb2e 100644 --- a/src/Magnum/Animation/Test/TrackViewTest.cpp +++ b/src/Magnum/Animation/Test/TrackViewTest.cpp @@ -589,7 +589,7 @@ void TrackViewTest::constructCopyStorage() { CORRADE_COMPARE(b.interpolator(), reinterpret_cast(customLerp)); CORRADE_COMPARE(b.keys().size(), 2); CORRADE_COMPARE(b.values().size(), 2); - CORRADE_COMPARE(Containers::arrayCast(b.keys())[1], 5.0f); + CORRADE_COMPARE(b.keys()[1], 5.0f); CORRADE_COMPARE(Containers::arrayCast(b.values())[1], (Vector3{0.3f, 0.6f, 1.0f})); auto& bv = *static_cast*>(&b); diff --git a/src/Magnum/SceneTools/Test/CombineTest.cpp b/src/Magnum/SceneTools/Test/CombineTest.cpp index 9ca1b270a..368ad1d2c 100644 --- a/src/Magnum/SceneTools/Test/CombineTest.cpp +++ b/src/Magnum/SceneTools/Test/CombineTest.cpp @@ -256,7 +256,7 @@ void CombineTest::fields() { /* Array field */ Trade::SceneFieldData{Trade::sceneFieldCustom(15), foos.slice(&Foo::mapping), - Containers::arrayCast<2, const Int>(foos.slice(&Foo::foo)), + Containers::StridedArrayView2D{foos.slice(&Foo::foo)}, Trade::SceneFieldFlag::OrderedMapping}, /* Empty field */ Trade::SceneFieldData{Trade::SceneField::Camera, Containers::ArrayView{}, Containers::ArrayView{}}, @@ -320,10 +320,10 @@ void CombineTest::fields() { /** @todo clean up once it's possible to compare multidimensional containers */ CORRADE_COMPARE_AS(scene.field(3)[0], - (Containers::arrayCast<2, const Int>(foos.slice(&Foo::foo)))[0], + (Containers::StridedArrayView2D{foos.slice(&Foo::foo)})[0], TestSuite::Compare::Container); CORRADE_COMPARE_AS(scene.field(3)[1], - (Containers::arrayCast<2, const Int>(foos.slice(&Foo::foo)))[1], + (Containers::StridedArrayView2D{foos.slice(&Foo::foo)})[1], TestSuite::Compare::Container); CORRADE_COMPARE(scene.fieldName(4), Trade::SceneField::Camera); diff --git a/src/Magnum/SceneTools/Test/FilterTest.cpp b/src/Magnum/SceneTools/Test/FilterTest.cpp index a863dad56..4f8dec722 100644 --- a/src/Magnum/SceneTools/Test/FilterTest.cpp +++ b/src/Magnum/SceneTools/Test/FilterTest.cpp @@ -513,7 +513,7 @@ void FilterTest::fieldEntries() { because items are removed. */ Trade::SceneFieldData{Trade::sceneFieldCustom(333), Containers::arrayView(sceneData->arrayMapping), - Containers::arrayCast<2, const Float>(Containers::stridedArrayView(sceneData->array)), + Containers::StridedArrayView2D{Containers::stridedArrayView(sceneData->array)}, Trade::SceneFieldFlag::ImplicitMapping}, /* Bit field. Should cause no assert as it's just passed through. */ Trade::SceneFieldData{Trade::sceneFieldCustom(15), diff --git a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp index f4c8112c9..6cbcc1741 100644 --- a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp +++ b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp @@ -1511,7 +1511,7 @@ template void DistanceFieldVectorGLTest::ren Image2D rendered = _framebuffer.read(_framebuffer.viewport(), {PixelFormat::RGBA8Unorm}); /* Dropping the alpha channel, as it's always 1.0 */ Containers::StridedArrayView2D pixels = - Containers::arrayCast(rendered.pixels()); + rendered.pixels().slice(&Color4ub::rgb); if(data.flip) pixels = pixels.flipped<0>().flipped<1>(); #if !(defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL)) diff --git a/src/Magnum/TextureTools/Test/AtlasBenchmark.cpp b/src/Magnum/TextureTools/Test/AtlasBenchmark.cpp index 2f12e7afb..bfdec72d7 100644 --- a/src/Magnum/TextureTools/Test/AtlasBenchmark.cpp +++ b/src/Magnum/TextureTools/Test/AtlasBenchmark.cpp @@ -364,8 +364,8 @@ void AtlasBenchmark::landfill() { auto sizes16 = Containers::arrayCast(*sizeData); Containers::Array sizes{NoInit, sizes16.size()}; Math::castInto( - Containers::arrayCast<2, const Short>(stridedArrayView(sizes16)), - Containers::arrayCast<2, Int>(stridedArrayView(sizes))); + stridedArrayView(sizes16).slice(&Vector2s::data), + stridedArrayView(sizes).slice(&Vector2i::data)); _sizes = sizes; AtlasLandfill atlas{data.size}; @@ -396,8 +396,8 @@ void AtlasBenchmark::stbRectPack() { auto sizes16 = Containers::arrayCast(*sizeData); Containers::Array sizes{NoInit, sizes16.size()}; Math::castInto( - Containers::arrayCast<2, const Short>(stridedArrayView(sizes16)), - Containers::arrayCast<2, Int>(stridedArrayView(sizes))); + stridedArrayView(sizes16).slice(&Vector2s::data), + stridedArrayView(sizes).slice(&Vector2i::data)); _sizes = sizes; if(data.rotate) for(Vector2i& size: _sizes) {