From 0fff65a16aed6a41bbb53958d9f5aff92984d372 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Wed, 6 Oct 2021 13:06:45 +0200 Subject: [PATCH] Avoid duplicate checks in CoordCache The code is written in such a way that the elements are searched several times. This can be expensive when there are a lots of insets in the document. Concerning the sanity checks, they are now conditionned on the presence of assertion. Related to bug #12297. --- src/CoordCache.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/CoordCache.h b/src/CoordCache.h index 44ac26c66d..b99cbe6ddd 100644 --- a/src/CoordCache.h +++ b/src/CoordCache.h @@ -26,7 +26,7 @@ class MathData; void lyxbreaker(void const * data, const char * hint, int size); struct Geometry { - Point pos; + Point pos = {-10000, -10000 }; Dimension dim; bool covers(int x, int y) const @@ -75,8 +75,6 @@ public: void add(T const * thing, Dimension const & dim) { - if (!has(thing)) - data_[thing].pos = Point(-10000, -10000); data_[thing].dim = dim; } @@ -147,6 +145,7 @@ public: private: friend class CoordCache; +#ifdef ENABLE_ASSERTIONS void checkDim(T const * thing, char const * hint) const { if (!hasDim(thing)) @@ -158,6 +157,11 @@ private: if (!has(thing)) lyxbreaker(thing, hint, data_.size()); } +#else + void checkDim(T const *, char const * const ) const {} + + void check(T const *, char const *) const {} +#endif typedef std::unordered_map cache_type; cache_type data_;