From 39c26505b5e2af9f0529548dd3b27ffddf499057 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 8 Nov 2006 10:37:04 +0100 Subject: [PATCH] class-ify bezier term cache --- lily/bezier.cc | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/lily/bezier.cc b/lily/bezier.cc index f5489e7d40..77f3949992 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -134,31 +134,28 @@ Bezier::curve_point (Real t) const /* Cache binom(3,j) t^j (1-t)^{3-j} */ -static struct Polynomial bezier_term_cache[4]; -static bool done_cache_init; +struct Polynomial_cache { + Polynomial terms_[4]; + Polynomial_cache () + { + for (int j = 0; j <= 3; j++) + terms_[j] + = binomial_coefficient_3[j] + * Polynomial::power (j, Polynomial (0, 1)) + * Polynomial::power (3 - j, Polynomial (1, -1)); + } +}; -void -init_polynomial_cache () -{ - for (int j = 0; j <= 3; j++) - bezier_term_cache[j] - = binomial_coefficient_3[j] - * Polynomial::power (j, Polynomial (0, 1)) - * Polynomial::power (3 - j, Polynomial (1, -1)); - done_cache_init = true; -} +static Polynomial_cache poly_cache; Polynomial Bezier::polynomial (Axis a) const { - if (!done_cache_init) - init_polynomial_cache (); - Polynomial p (0.0); Polynomial q; for (int j = 0; j <= 3; j++) { - q = bezier_term_cache[j]; + q = poly_cache.terms_[j]; q *= control_[j][a]; p += q; } -- 2.39.2