shithub: rgbds

Download patch

ref: 2099a25ee06bad044e366278878126f8184ef9e3
parent: b9de65c9a2f2f6377394bf7ac09267ad6618b1a9
author: ISSOtm <[email protected]>
date: Wed Mar 9 19:51:53 EST 2022

Avoid using `transform_reduce`

Not available in libstdc++ 7, apparently

--- a/src/gfx/pal_packing.cpp
+++ b/src/gfx/pal_packing.cpp
@@ -208,20 +208,19 @@
 	 * Computes the "relative size" of a proto-palette on this palette
 	 */
 	double relSizeOf(ProtoPalette const &protoPal) const {
-		// NOTE: this function must not call `uniqueColors`, or one of its callers will break
-		return std::transform_reduce(
-		    protoPal.begin(), protoPal.end(), 0.0, std::plus<>(), [this](uint16_t color) {
-			    // NOTE: The paper and the associated code disagree on this: the code has
-			    // this `1 +`, whereas the paper does not; its lack causes a division by 0
-			    // if the symbol is not found anywhere, so I'm assuming the paper is wrong.
-			    return 1.
-			           / (1
-			              + std::count_if(
-			                  begin(), end(), [this, &color](ProtoPalAttrs const &attrs) {
-				                  ProtoPalette const &pal = (*_protoPals)[attrs.palIndex];
-				                  return std::find(pal.begin(), pal.end(), color) != pal.end();
-			                  }));
-		    });
+		// NOTE: this function must not call `uniqueColors`, or one of its callers will break!
+		double relSize = 0.;
+		for (uint16_t color : protoPal) {
+			// NOTE: The paper and the associated code disagree on this: the code has
+			// this `1 +`, whereas the paper does not; its lack causes a division by 0
+			// if the symbol is not found anywhere, so I'm assuming the paper is wrong.
+			relSize +=
+			    1. / (1 + std::count_if(begin(), end(), [this, &color](ProtoPalAttrs const &attrs) {
+				          ProtoPalette const &pal = (*_protoPals)[attrs.palIndex];
+				          return std::find(pal.begin(), pal.end(), color) != pal.end();
+			          }));
+		}
+		return relSize;
 	}
 
 	/**