Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <deathbaba@gmail.com>2011-08-29 19:15:06 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:22:42 +0300
commita6a759b1cd73c812a63dd365a76cb672615e36ba (patch)
tree7fa1b6fc53158c6a37186023a8945452b6ccc143 /generator
parent2ae492f3a7d11ea1bac20b293a802ee6c9939f97 (diff)
Moved osm_decl.hpp from indexer to generator
Minor include fixes
Diffstat (limited to 'generator')
-rw-r--r--generator/data_cache_file.hpp3
-rw-r--r--generator/data_generator.cpp6
-rw-r--r--generator/feature_generator.cpp2
-rw-r--r--generator/feature_generator.hpp3
-rw-r--r--generator/feature_sorter.hpp1
-rw-r--r--generator/first_pass_parser.hpp3
-rw-r--r--generator/generator.pro6
-rw-r--r--generator/generator_tool/generator_tool.cpp1
-rw-r--r--generator/osm_decl.cpp85
-rw-r--r--generator/osm_decl.hpp137
-rw-r--r--generator/osm_element.hpp2
11 files changed, 233 insertions, 16 deletions
diff --git a/generator/data_cache_file.hpp b/generator/data_cache_file.hpp
index 086b70804b..b8ef6ac5ba 100644
--- a/generator/data_cache_file.hpp
+++ b/generator/data_cache_file.hpp
@@ -1,8 +1,9 @@
#pragma once
+#include "osm_decl.hpp"
+
#include "../indexer/file_reader_stream.hpp"
#include "../indexer/file_writer_stream.hpp"
-#include "../indexer/osm_decl.hpp"
#include "../coding/file_reader.hpp"
#include "../coding/file_writer.hpp"
diff --git a/generator/data_generator.cpp b/generator/data_generator.cpp
index b02fd9551c..14cbdfb8f8 100644
--- a/generator/data_generator.cpp
+++ b/generator/data_generator.cpp
@@ -1,17 +1,13 @@
#include "data_generator.hpp"
#include "data_cache_file.hpp"
#include "first_pass_parser.hpp"
-
-#include "../indexer/osm_decl.hpp"
+#include "osm_decl.hpp"
#include "../base/std_serialization.hpp"
#include "../base/logging.hpp"
#include "../std/bind.hpp"
-#include "../base/start_mem_debug.hpp"
-
-
namespace data
{
diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp
index c7bbabe577..5e8dbdd292 100644
--- a/generator/feature_generator.cpp
+++ b/generator/feature_generator.cpp
@@ -2,11 +2,11 @@
#include "data_cache_file.hpp"
#include "osm_element.hpp"
#include "polygonizer.hpp"
+#include "osm_decl.hpp"
#include "../defines.hpp"
#include "../indexer/data_header.hpp"
-#include "../indexer/osm_decl.hpp"
#include "../indexer/mercator.hpp"
#include "../indexer/cell_id.hpp"
diff --git a/generator/feature_generator.hpp b/generator/feature_generator.hpp
index c57662bd12..f775c3c45d 100644
--- a/generator/feature_generator.hpp
+++ b/generator/feature_generator.hpp
@@ -1,8 +1,7 @@
#pragma once
#include "generate_info.hpp"
-
-#include "../indexer/osm_decl.hpp"
+#include "osm_decl.hpp"
#include "../geometry/rect2d.hpp"
diff --git a/generator/feature_sorter.hpp b/generator/feature_sorter.hpp
index f64d55f612..39e2c60a35 100644
--- a/generator/feature_sorter.hpp
+++ b/generator/feature_sorter.hpp
@@ -7,7 +7,6 @@
#include "../indexer/scales.hpp"
#include "../std/string.hpp"
-#include "../std/vector.hpp"
namespace feature
{
diff --git a/generator/first_pass_parser.hpp b/generator/first_pass_parser.hpp
index 0d115e59c4..a38e879beb 100644
--- a/generator/first_pass_parser.hpp
+++ b/generator/first_pass_parser.hpp
@@ -1,13 +1,12 @@
#pragma once
#include "xml_element.hpp"
+#include "osm_decl.hpp"
-#include "../indexer/osm_decl.hpp"
#include "../indexer/mercator.hpp"
#include "../base/string_utils.hpp"
-
template <class THolder>
class FirstPassParser : public BaseOSMParser
{
diff --git a/generator/generator.pro b/generator/generator.pro
index aee3bda4e6..48e3d60df6 100644
--- a/generator/generator.pro
+++ b/generator/generator.pro
@@ -27,7 +27,8 @@ SOURCES += \
mwm_rect_updater.cpp \
dumper.cpp \
unpack_mwm.cpp \
- feature_builder.cpp
+ feature_builder.cpp \
+ osm_decl.cpp \
HEADERS += \
feature_merger.hpp \
@@ -52,4 +53,5 @@ HEADERS += \
dumper.hpp \
generate_info.hpp \
unpack_mwm.hpp \
- feature_builder.hpp
+ feature_builder.hpp \
+ osm_decl.hpp \
diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp
index 89658ff38f..2c1e7046b2 100644
--- a/generator/generator_tool/generator_tool.cpp
+++ b/generator/generator_tool/generator_tool.cpp
@@ -13,7 +13,6 @@
#include "../../indexer/data_header.hpp"
#include "../../indexer/features_vector.hpp"
#include "../../indexer/index_builder.hpp"
-#include "../../indexer/osm_decl.hpp"
#include "../../indexer/search_index_builder.hpp"
#include "../../defines.hpp"
diff --git a/generator/osm_decl.cpp b/generator/osm_decl.cpp
new file mode 100644
index 0000000000..9a39f6cbfd
--- /dev/null
+++ b/generator/osm_decl.cpp
@@ -0,0 +1,85 @@
+#include "osm_decl.hpp"
+
+#include "../indexer/classificator.hpp"
+
+#include "../base/macros.hpp"
+
+#include "../std/target_os.hpp"
+
+namespace feature
+{
+ char const * arrUnite[1][2] = { { "natural", "coastline" } };
+
+ bool NeedUnite(string const & k, string const & v)
+ {
+ for (size_t i = 0; i < ARRAY_SIZE(arrUnite); ++i)
+ if (k == arrUnite[i][0] && v == arrUnite[i][1])
+ return true;
+
+ return false;
+ }
+
+ bool NeedUnite(uint32_t type)
+ {
+ static uint32_t arrTypes[1] = { 0 };
+
+ if (arrTypes[0] == 0)
+ {
+ // initialize static array
+ for (size_t i = 0; i < ARRAY_SIZE(arrUnite); ++i)
+ {
+ size_t const count = ARRAY_SIZE(arrUnite[i]);
+ vector<string> path(count);
+ for (size_t j = 0; j < count; ++j)
+ path[j] = arrUnite[i][j];
+
+ arrTypes[i] = classif().GetTypeByPath(path);
+ }
+ }
+
+ for (size_t i = 0; i < ARRAY_SIZE(arrTypes); ++i)
+ if (arrTypes[i] == type)
+ return true;
+
+ return false;
+ }
+}
+
+void progress_policy::Begin(string const & /*name*/, size_t factor)
+{
+ m_count = 0;
+ m_factor = factor;
+//#ifndef OMIM_OS_BADA
+// cout << "Progress of " << name << " started" << endl;
+//#endif
+}
+
+void progress_policy::Inc(size_t i /* = 1 */)
+{
+ m_count += i;
+//#ifndef OMIM_OS_BADA
+// if (m_count % m_factor == 0)
+// cout << '.';
+//#endif
+}
+
+void progress_policy::End()
+{
+}
+
+string RelationElement::GetType() const
+{
+ map<string, string>::const_iterator i = tags.find("type");
+ return ((i != tags.end()) ? i->second : string());
+}
+
+bool RelationElement::FindWay(uint64_t id, string & role) const
+{
+ for (size_t i = 0; i < ways.size(); ++i)
+ if (ways[i].first == id)
+ {
+ role = ways[i].second;
+ return true;
+ }
+ return false;
+}
diff --git a/generator/osm_decl.hpp b/generator/osm_decl.hpp
new file mode 100644
index 0000000000..f438ccfa90
--- /dev/null
+++ b/generator/osm_decl.hpp
@@ -0,0 +1,137 @@
+#pragma once
+
+#include "../base/std_serialization.hpp"
+#include "../base/assert.hpp"
+
+#include "../std/utility.hpp"
+#include "../std/vector.hpp"
+#include "../std/string.hpp"
+#include "../std/algorithm.hpp"
+#include "../std/bind.hpp"
+
+
+/// Used to store all world nodes inside temporary index file.
+/// To find node by id, just calculate offset inside index file:
+/// offset_in_file = sizeof(LatLon) * node_ID
+struct LatLon
+{
+ double lat;
+ double lon;
+};
+STATIC_ASSERT(sizeof(LatLon) == 16);
+
+struct LatLonPos
+{
+ uint64_t pos;
+ double lat;
+ double lon;
+};
+STATIC_ASSERT(sizeof(LatLonPos) == 24);
+
+#define NODES_FILE "nodes.dat"
+#define WAYS_FILE "ways.dat"
+#define RELATIONS_FILE "relations.dat"
+#define OFFSET_EXT ".offs"
+#define ID2REL_EXT ".id2rel"
+#define MAPPED_WAYS "mapped_ways.n2w"
+
+
+namespace feature
+{
+ /// @name Need to unite features.
+ //@{
+ /// @param[in] k, v Key and Value from relation tags.
+ bool NeedUnite(string const & k, string const & v);
+ /// @param[in] type Type from feature.
+ bool NeedUnite(uint32_t type);
+ //@}
+}
+
+class progress_policy
+{
+ size_t m_count;
+ size_t m_factor;
+
+public:
+ size_t GetCount() const { return m_count; }
+
+ void Begin(string const &, size_t factor);
+ void Inc(size_t i = 1);
+ void End();
+};
+
+struct WayElement
+{
+ vector<uint64_t> nodes;
+ uint64_t m_wayOsmId;
+
+ explicit WayElement(uint64_t osmId) : m_wayOsmId(osmId) {}
+
+ bool IsValid() const { return !nodes.empty(); }
+
+ uint64_t GetOtherEndPoint(uint64_t id) const
+ {
+ if (id == nodes.front())
+ return nodes.back();
+ else
+ {
+ ASSERT ( id == nodes.back(), () );
+ return nodes.front();
+ }
+ }
+
+ template <class ToDo> void ForEachPoint(ToDo & toDo) const
+ {
+ for_each(nodes.begin(), nodes.end(), bind<void>(ref(toDo), _1));
+ }
+
+ template <class ToDo> void ForEachPointOrdered(uint64_t start, ToDo & toDo)
+ {
+ if (start == nodes.front())
+ for_each(nodes.begin(), nodes.end(), bind<void>(ref(toDo), _1));
+ else
+ for_each(nodes.rbegin(), nodes.rend(), bind<void>(ref(toDo), _1));
+ }
+};
+
+struct RelationElement
+{
+ typedef vector<pair<uint64_t, string> > ref_vec_t;
+ ref_vec_t nodes, ways;
+ map<string, string> tags;
+
+ bool IsValid() const { return !(nodes.empty() && ways.empty()); }
+
+ string GetType() const;
+ bool FindWay(uint64_t id, string & role) const;
+
+ template <class ToDo> void ForEachWay(ToDo & toDo) const
+ {
+ for (size_t i = 0; i < ways.size(); ++i)
+ toDo(ways[i].first, ways[i].second);
+ }
+};
+
+template <class TArchive> TArchive & operator << (TArchive & ar, WayElement const & e)
+{
+ ar << e.nodes;
+ return ar;
+}
+
+template <class TArchive> TArchive & operator >> (TArchive & ar, WayElement & e)
+{
+ ar >> e.nodes;
+ return ar;
+}
+
+template <class TArchive> TArchive & operator << (TArchive & ar, RelationElement const & e)
+{
+ ar << e.nodes << e.ways << e.tags;
+ return ar;
+}
+
+template <class TArchive> TArchive & operator >> (TArchive & ar, RelationElement & e)
+{
+ ar >> e.nodes >> e.ways >> e.tags;
+ return ar;
+}
diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp
index 037ee83e0a..01164a1fcc 100644
--- a/generator/osm_element.hpp
+++ b/generator/osm_element.hpp
@@ -3,8 +3,8 @@
#include "osm2type.hpp"
#include "xml_element.hpp"
#include "feature_builder.hpp"
+#include "osm_decl.hpp"
-#include "../indexer/osm_decl.hpp"
#include "../indexer/feature_visibility.hpp"
#include "../base/string_utils.hpp"