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

63
base/visitor.hpp Normal file
View File

@@ -0,0 +1,63 @@
#pragma once
#include <sstream>
#include <string>
class DebugPrintVisitor
{
public:
DebugPrintVisitor(std::string const & name) : m_name(name) {}
template <typename T>
void operator()(T const & t, char const * name = nullptr)
{
if (!m_empty)
m_os << ", ";
m_empty = false;
if (name)
m_os << name << ": ";
m_os << DebugPrint(t);
}
// This override is implemented to support deserialization with optional values
// which could be declared by DECLARE_VISITOR_AND_DEBUG_PRINT macro.
// Because of this class is used just for serialize structures into strings,
// the second parameter is used for method signature compatibility only.
template <typename T>
void operator()(T const & t, T const &, char const * name = nullptr)
{
operator()(t, name);
}
std::string ToString() const { return m_name + " [" + m_os.str() + "]"; }
private:
std::string m_name;
bool m_empty = true;
std::ostringstream m_os;
};
#define DECLARE_VISITOR(...) \
template <typename Visitor> \
void Visit(Visitor & visitor) \
{ \
__VA_ARGS__; \
} \
template <typename Visitor> \
void Visit(Visitor & visitor) const \
{ \
__VA_ARGS__; \
}
#define DECLARE_DEBUG_PRINT(className) \
friend std::string DebugPrint(className const & c) \
{ \
DebugPrintVisitor visitor(#className); \
c.Visit(visitor); \
return visitor.ToString(); \
}
#define DECLARE_VISITOR_AND_DEBUG_PRINT(className, ...) \
DECLARE_VISITOR(__VA_ARGS__) \
DECLARE_DEBUG_PRINT(className)