Use the new hotness with is Span
diff --git a/include/rive/renderer.hpp b/include/rive/renderer.hpp index 0053fa7..adeff88 100644 --- a/include/rive/renderer.hpp +++ b/include/rive/renderer.hpp
@@ -5,6 +5,7 @@ #include "rive/command_path.hpp" #include "rive/layout.hpp" #include "rive/refcnt.hpp" +#include "rive/span.hpp" #include "rive/math/aabb.hpp" #include "rive/math/mat2d.hpp" #include "rive/shapes/paint/blend_mode.hpp" @@ -26,9 +27,9 @@ size_t count() const { return m_Count; } }; - extern rcp<RenderBuffer> makeBufferU16(const uint16_t[], size_t count); - extern rcp<RenderBuffer> makeBufferU32(const uint32_t[], size_t count); - extern rcp<RenderBuffer> makeBufferF32(const float[], size_t count); + extern rcp<RenderBuffer> makeBufferU16(Span<const uint16_t>); + extern rcp<RenderBuffer> makeBufferU32(Span<const uint32_t>); + extern rcp<RenderBuffer> makeBufferF32(Span<const float>); enum class RenderPaintStyle { stroke, fill }; @@ -90,7 +91,7 @@ public: virtual ~RenderImage() {} - virtual bool decode(const uint8_t* bytes, std::size_t size) = 0; + virtual bool decode(Span<const uint8_t>) = 0; int width() const { return m_Width; } int height() const { return m_Height; }
diff --git a/include/rive/span.hpp b/include/rive/span.hpp index 714272e..36bfbe7 100644 --- a/include/rive/span.hpp +++ b/include/rive/span.hpp
@@ -42,7 +42,14 @@ constexpr T& front() const { return (*this)[0]; } constexpr T& back() const { return (*this)[m_Size-1]; } - constexpr size_t totalBytes() const { return m_Size * sizeof(T); } + // returns byte-size of the entire span + constexpr size_t size_bytes() const { return m_Size * sizeof(T); } + + constexpr int count() const { + const int n = static_cast<int>(m_Size); + assert(n >= 0); + return n; + } constexpr Span<T> subset(size_t offset, size_t size) const { assert(offset <= m_Size);
diff --git a/skia/renderer/include/skia_renderer.hpp b/skia/renderer/include/skia_renderer.hpp index 74f78ff..d7af5f7 100644 --- a/skia/renderer/include/skia_renderer.hpp +++ b/skia/renderer/include/skia_renderer.hpp
@@ -47,7 +47,7 @@ public: sk_sp<SkImage> skImage() const { return m_SkImage; }; - bool decode(const uint8_t* bytes, std::size_t size) override; + bool decode(Span<const uint8_t>) override; rcp<RenderShader> makeShader(RenderTileMode tx, RenderTileMode ty, const Mat2D* localMatrix) const override; };
diff --git a/skia/renderer/src/skia_renderer.cpp b/skia/renderer/src/skia_renderer.cpp index 430a13f..7be0650 100644 --- a/skia/renderer/src/skia_renderer.cpp +++ b/skia/renderer/src/skia_renderer.cpp
@@ -44,8 +44,8 @@ } }; -template <typename T> rcp<RenderBuffer> make_buffer(const T src[], size_t count) { - return rcp<RenderBuffer>(new SkiaBuffer(src, count, sizeof(T))); +template <typename T> rcp<RenderBuffer> make_buffer(Span<T> span) { + return rcp<RenderBuffer>(new SkiaBuffer(span.data(), span.size(), sizeof(T))); } class SkiaRenderShader : public RenderShader { @@ -172,9 +172,10 @@ m_Canvas->drawVertices(vt, SkBlendMode::kModulate, paint); } -bool SkiaRenderImage::decode(const uint8_t* bytes, std::size_t size) { +bool SkiaRenderImage::decode(Span<const uint8_t> encodedData) { - sk_sp<SkData> data = SkData::MakeWithoutCopy(bytes, size); + sk_sp<SkData> data = SkData::MakeWithoutCopy(encodedData.data(), + encodedData.size()); m_SkImage = SkImage::MakeFromEncoded(data); m_Width = m_SkImage->width(); m_Height = m_SkImage->height(); @@ -191,13 +192,13 @@ namespace rive { rcp<RenderBuffer> makeBufferU16(const uint16_t src[], size_t count) { - return make_buffer<uint16_t>(src, count); + return make_buffer(Span{src, count}); } rcp<RenderBuffer> makeBufferU32(const uint32_t src[], size_t count) { - return make_buffer<uint32_t>(src, count); + return make_buffer(Span{src, count}); } rcp<RenderBuffer> makeBufferF32(const float src[], size_t count) { - return make_buffer<float>(src, count); + return make_buffer(Span{src, count}); } RenderPath* makeRenderPath() { return new SkiaRenderPath(); }
diff --git a/src/assets/image_asset.cpp b/src/assets/image_asset.cpp index 8433680..6988c1b 100644 --- a/src/assets/image_asset.cpp +++ b/src/assets/image_asset.cpp
@@ -10,7 +10,7 @@ #ifdef TESTING decodedByteSize = size; #endif - return m_RenderImage->decode(bytes, size); + return m_RenderImage->decode({bytes, size}); } -std::string ImageAsset::fileExtension() { return "png"; } \ No newline at end of file +std::string ImageAsset::fileExtension() { return "png"; }
diff --git a/test/no_op_renderer.hpp b/test/no_op_renderer.hpp index 56903dd..57d23df 100644 --- a/test/no_op_renderer.hpp +++ b/test/no_op_renderer.hpp
@@ -6,7 +6,7 @@ namespace rive { class NoOpRenderImage : public RenderImage { public: - bool decode(const uint8_t* bytes, std::size_t size) override { + bool decode(Span<const uint8_t>) override { return true; } rcp<RenderShader> makeShader(RenderTileMode, RenderTileMode, const Mat2D*) const override {
diff --git a/test/span_test.cpp b/test/span_test.cpp index 1a84ea5..b252d2a 100644 --- a/test/span_test.cpp +++ b/test/span_test.cpp
@@ -12,7 +12,7 @@ Span<int> span; REQUIRE(span.empty()); REQUIRE(span.size() == 0); - REQUIRE(span.totalBytes() == 0); + REQUIRE(span.size_bytes() == 0); REQUIRE(span.begin() == span.end()); int array[] = { 0, 1, 2, 3, 4, 5, 6,7 ,8, 9 }; @@ -21,7 +21,7 @@ REQUIRE(!span.empty()); REQUIRE(span.data() == array); REQUIRE(span.size() == 4); - REQUIRE(span.totalBytes() == 4 * sizeof(int)); + REQUIRE(span.size_bytes() == 4 * sizeof(int)); REQUIRE(span.begin() + span.size() == span.end()); int counter = 0;