From 8833cc8521a9a227cd66054aa80d78f7b9f664e3 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 3 Feb 2025 21:41:57 +0900 Subject: [PATCH] commmon: ++neat code introduced ARRAY_REVERSE_FOREACH() macro. --- src/common/tvgArray.h | 3 +++ src/loaders/lottie/tvgLottieBuilder.cpp | 8 ++++---- src/loaders/lottie/tvgLottieModel.cpp | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/common/tvgArray.h b/src/common/tvgArray.h index 4b64be7c..5c2755ab 100644 --- a/src/common/tvgArray.h +++ b/src/common/tvgArray.h @@ -30,6 +30,9 @@ #define ARRAY_FOREACH(A, B) \ for (auto A = (B).begin(); A < (B).end(); ++A) +#define ARRAY_REVERSE_FOREACH(A, B) \ + for (auto A = (B).end() - 1; A >= (B).begin(); --A) + namespace tvg { diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 4ab6adef..3764f42a 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -325,7 +325,7 @@ static void _repeat(LottieGroup* parent, Shape* path, RenderContext* ctx) propagators.push(ctx->propagator); Array shapes; - for (auto repeater = ctx->repeaters.end() - 1; repeater >= ctx->repeaters.begin(); --repeater) { + ARRAY_REVERSE_FOREACH(repeater, ctx->repeaters) { shapes.reserve(repeater->cnt); for (int i = 0; i < repeater->cnt; ++i) { @@ -363,7 +363,7 @@ static void _repeat(LottieGroup* parent, Shape* path, RenderContext* ctx) propagators.push(*p); } } else if (!shapes.empty()) { - for (auto shape = shapes.end() - 1; shape >= shapes.begin(); --shape) { + ARRAY_REVERSE_FOREACH(shape, shapes) { parent->scene->push(*shape); propagators.push(*shape); } @@ -949,7 +949,7 @@ void LottieBuilder::updatePrecomp(LottieComposition* comp, LottieLayer* precomp, frameNo = precomp->remap(comp, frameNo, exps); - for (auto c = precomp->children.end() - 1; c >= precomp->children.begin(); --c) { + ARRAY_REVERSE_FOREACH(c, precomp->children) { auto child = static_cast(*c); if (!child->matteSrc) updateLayer(comp, precomp->scene, child, frameNo); } @@ -1589,7 +1589,7 @@ bool LottieBuilder::update(LottieComposition* comp, float frameNo) if (exps && comp->expressions) exps->update(comp->timeAtFrame(frameNo)); - for (auto child = root->children.end() - 1; child >= root->children.begin(); --child) { + ARRAY_REVERSE_FOREACH(child, root->children) { auto layer = static_cast(*child); if (!layer->matteSrc) updateLayer(comp, root->scene, layer, frameNo); } diff --git a/src/loaders/lottie/tvgLottieModel.cpp b/src/loaders/lottie/tvgLottieModel.cpp index 7b02760a..8645da5a 100644 --- a/src/loaders/lottie/tvgLottieModel.cpp +++ b/src/loaders/lottie/tvgLottieModel.cpp @@ -409,7 +409,7 @@ void LottieGroup::prepare(LottieObject::Type type) size_t strokeCnt = 0; size_t fillCnt = 0; - for (auto c = children.end() - 1; c >= children.begin(); --c) { + ARRAY_REVERSE_FOREACH(c, children) { auto child = static_cast(*c); if (child->type == LottieObject::Type::Trimpath) trimpath = true;