Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)

To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
This commit is contained in:
Konstantin Pastbin
2025-04-13 16:37:30 +07:00
commit e3e4a1985a
12931 changed files with 13195100 additions and 0 deletions

75
search/geometry_cache.cpp Normal file
View File

@@ -0,0 +1,75 @@
#include "search/geometry_cache.hpp"
#include "search/geometry_utils.hpp"
#include "search/mwm_context.hpp"
#include "search/retrieval.hpp"
#include "coding/point_coding.hpp"
#include "geometry/mercator.hpp"
namespace search
{
// GeometryCache -----------------------------------------------------------------------------------
GeometryCache::GeometryCache(size_t maxNumEntries, base::Cancellable const & cancellable)
: m_maxNumEntries(maxNumEntries), m_cancellable(cancellable)
{
CHECK_GREATER(m_maxNumEntries, 0, ());
}
void GeometryCache::InitEntry(MwmContext const & context, m2::RectD const & rect, int scale,
Entry & entry)
{
Retrieval retrieval(context, m_cancellable);
entry.m_rect = rect;
entry.m_cbv = retrieval.RetrieveGeometryFeatures(rect, scale);
entry.m_scale = scale;
}
// PivotRectsCache ---------------------------------------------------------------------------------
PivotRectsCache::PivotRectsCache(size_t maxNumEntries, base::Cancellable const & cancellable,
double maxRadiusMeters)
: GeometryCache(maxNumEntries, cancellable), m_maxRadiusMeters(maxRadiusMeters)
{
}
CBV PivotRectsCache::Get(MwmContext const & context, m2::RectD const & rect, int scale)
{
auto p = FindOrCreateEntry(
context.GetId(), [&rect, &scale](Entry const & entry)
{
return scale == entry.m_scale &&
(entry.m_rect.IsRectInside(rect) || IsEqualMercator(rect, entry.m_rect, kMwmPointAccuracy));
});
auto & entry = p.first;
if (p.second)
{
m2::RectD normRect = mercator::RectByCenterXYAndSizeInMeters(rect.Center(), m_maxRadiusMeters);
if (!normRect.IsRectInside(rect))
normRect = rect;
InitEntry(context, normRect, scale, entry);
}
return entry.m_cbv;
}
// LocalityRectsCache ------------------------------------------------------------------------------
LocalityRectsCache::LocalityRectsCache(size_t maxNumEntries,
base::Cancellable const & cancellable)
: GeometryCache(maxNumEntries, cancellable)
{
}
CBV LocalityRectsCache::Get(MwmContext const & context, m2::RectD const & rect, int scale)
{
auto p = FindOrCreateEntry(context.GetId(), [&rect, &scale](Entry const & entry)
{
return scale == entry.m_scale &&
IsEqualMercator(rect, entry.m_rect, kMwmPointAccuracy);
});
auto & entry = p.first;
if (p.second)
InitEntry(context, rect, scale, entry);
return entry.m_cbv;
}
} // namespace search