refactor ExtractorStructs.h for faster compiles. achieves approx. 10 secs
This commit is contained in:
parent
ce60af5029
commit
046fe93f1f
@ -39,8 +39,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "../DataStructures/OriginalEdgeData.h"
|
#include "../DataStructures/OriginalEdgeData.h"
|
||||||
#include "../DataStructures/Percent.h"
|
#include "../DataStructures/Percent.h"
|
||||||
#include "../DataStructures/QueryEdge.h"
|
#include "../DataStructures/QueryEdge.h"
|
||||||
|
#include "../DataStructures/QueryNode.h"
|
||||||
#include "../DataStructures/TurnInstructions.h"
|
#include "../DataStructures/TurnInstructions.h"
|
||||||
#include "../Extractor/ExtractorStructs.h"
|
#include "../DataStructures/Restriction.h"
|
||||||
#include "../Util/LuaUtil.h"
|
#include "../Util/LuaUtil.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
|
|
||||||
|
@ -105,13 +105,16 @@ struct InputRestrictionContainer {
|
|||||||
return InputRestrictionContainer(0, 0, 0, 0);
|
return InputRestrictionContainer(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
static InputRestrictionContainer max_value() {
|
static InputRestrictionContainer max_value() {
|
||||||
return InputRestrictionContainer(UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX);
|
return InputRestrictionContainer(
|
||||||
|
UINT_MAX,
|
||||||
|
UINT_MAX,
|
||||||
|
UINT_MAX,
|
||||||
|
UINT_MAX
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmpRestrictionContainerByFrom :
|
struct CmpRestrictionContainerByFrom {
|
||||||
public std::binary_function<InputRestrictionContainer, InputRestrictionContainer, bool>
|
|
||||||
{
|
|
||||||
typedef InputRestrictionContainer value_type;
|
typedef InputRestrictionContainer value_type;
|
||||||
inline bool operator()(
|
inline bool operator()(
|
||||||
const InputRestrictionContainer & a,
|
const InputRestrictionContainer & a,
|
||||||
@ -127,7 +130,7 @@ struct CmpRestrictionContainerByFrom :
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmpRestrictionContainerByTo: public std::binary_function<InputRestrictionContainer, InputRestrictionContainer, bool> {
|
struct CmpRestrictionContainerByTo {
|
||||||
typedef InputRestrictionContainer value_type;
|
typedef InputRestrictionContainer value_type;
|
||||||
inline bool operator()(
|
inline bool operator()(
|
||||||
const InputRestrictionContainer & a,
|
const InputRestrictionContainer & a,
|
||||||
|
@ -26,14 +26,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BaseParser.h"
|
#include "BaseParser.h"
|
||||||
#include "ExtractorStructs.h"
|
#include "ExtractionWay.h"
|
||||||
#include "ScriptingEnvironment.h"
|
#include "ScriptingEnvironment.h"
|
||||||
|
|
||||||
|
#include "../DataStructures/ImportNode.h"
|
||||||
#include "../Util/LuaUtil.h"
|
#include "../Util/LuaUtil.h"
|
||||||
#include "../Util/OSRMException.h"
|
#include "../Util/OSRMException.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <boost/algorithm/string/regex.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/regex.hpp>
|
||||||
|
|
||||||
BaseParser::BaseParser(
|
BaseParser::BaseParser(
|
||||||
ExtractorCallbacks * extractor_callbacks,
|
ExtractorCallbacks * extractor_callbacks,
|
||||||
|
@ -26,6 +26,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ExtractionContainers.h"
|
#include "ExtractionContainers.h"
|
||||||
|
#include "ExtractionWay.h"
|
||||||
|
#include "../Util/SimpleLogger.h"
|
||||||
|
#include "../Util/TimingUtil.h"
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/filesystem/fstream.hpp>
|
||||||
|
|
||||||
|
#include <stxxl/sort>
|
||||||
|
|
||||||
|
ExtractionContainers::ExtractionContainers() {
|
||||||
|
//Check if stxxl can be instantiated
|
||||||
|
stxxl::vector<unsigned> dummy_vector;
|
||||||
|
name_list.push_back("");
|
||||||
|
}
|
||||||
|
|
||||||
|
ExtractionContainers::~ExtractionContainers() {
|
||||||
|
used_node_id_list.clear();
|
||||||
|
all_nodes_list.clear();
|
||||||
|
all_edges_list.clear();
|
||||||
|
name_list.clear();
|
||||||
|
restrictions_list.clear();
|
||||||
|
way_start_end_id_list.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void ExtractionContainers::PrepareData(
|
void ExtractionContainers::PrepareData(
|
||||||
const std::string & output_file_name,
|
const std::string & output_file_name,
|
||||||
|
@ -28,17 +28,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef EXTRACTIONCONTAINERS_H_
|
#ifndef EXTRACTIONCONTAINERS_H_
|
||||||
#define EXTRACTIONCONTAINERS_H_
|
#define EXTRACTIONCONTAINERS_H_
|
||||||
|
|
||||||
|
#include "InternalExtractorEdge.h"
|
||||||
#include "ExtractorStructs.h"
|
#include "ExtractorStructs.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../DataStructures/Restriction.h"
|
||||||
#include "../Util/TimingUtil.h"
|
|
||||||
#include "../Util/UUID.h"
|
#include "../Util/UUID.h"
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/filesystem/fstream.hpp>
|
|
||||||
|
|
||||||
#include <stxxl/sort>
|
|
||||||
#include <stxxl/vector>
|
#include <stxxl/vector>
|
||||||
|
|
||||||
class ExtractionContainers {
|
class ExtractionContainers {
|
||||||
@ -58,20 +52,9 @@ public:
|
|||||||
STXXLWayIDStartEndVector way_start_end_id_list;
|
STXXLWayIDStartEndVector way_start_end_id_list;
|
||||||
const UUID uuid;
|
const UUID uuid;
|
||||||
|
|
||||||
ExtractionContainers() {
|
ExtractionContainers();
|
||||||
//Check if stxxl can be instantiated
|
|
||||||
stxxl::vector<unsigned> dummy_vector;
|
|
||||||
name_list.push_back("");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~ExtractionContainers() {
|
virtual ~ExtractionContainers();
|
||||||
used_node_id_list.clear();
|
|
||||||
all_nodes_list.clear();
|
|
||||||
all_edges_list.clear();
|
|
||||||
name_list.clear();
|
|
||||||
restrictions_list.clear();
|
|
||||||
way_start_end_id_list.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrepareData(
|
void PrepareData(
|
||||||
const std::string & output_file_name,
|
const std::string & output_file_name,
|
||||||
|
78
Extractor/ExtractionWay.h
Normal file
78
Extractor/ExtractionWay.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EXTRACTION_WAY_H
|
||||||
|
#define EXTRACTION_WAY_H
|
||||||
|
|
||||||
|
#include "../DataStructures/HashTable.h"
|
||||||
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct ExtractionWay {
|
||||||
|
ExtractionWay() {
|
||||||
|
Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Clear(){
|
||||||
|
id = UINT_MAX;
|
||||||
|
nameID = UINT_MAX;
|
||||||
|
path.clear();
|
||||||
|
keyVals.clear();
|
||||||
|
direction = ExtractionWay::notSure;
|
||||||
|
speed = -1;
|
||||||
|
backward_speed = -1;
|
||||||
|
duration = -1;
|
||||||
|
type = -1;
|
||||||
|
access = true;
|
||||||
|
roundabout = false;
|
||||||
|
isAccessRestricted = false;
|
||||||
|
ignoreInGrid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Directions {
|
||||||
|
notSure = 0, oneway, bidirectional, opposite
|
||||||
|
};
|
||||||
|
unsigned id;
|
||||||
|
unsigned nameID;
|
||||||
|
double speed;
|
||||||
|
double backward_speed;
|
||||||
|
double duration;
|
||||||
|
Directions direction;
|
||||||
|
std::string name;
|
||||||
|
short type;
|
||||||
|
bool access;
|
||||||
|
bool roundabout;
|
||||||
|
bool isAccessRestricted;
|
||||||
|
bool ignoreInGrid;
|
||||||
|
std::vector< NodeID > path;
|
||||||
|
HashTable<std::string, std::string> keyVals;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //EXTRACTION_WAY_H
|
@ -27,8 +27,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "ExtractionContainers.h"
|
#include "ExtractionContainers.h"
|
||||||
#include "ExtractionHelperFunctions.h"
|
#include "ExtractionHelperFunctions.h"
|
||||||
|
#include "ExtractionWay.h"
|
||||||
#include "ExtractorCallbacks.h"
|
#include "ExtractorCallbacks.h"
|
||||||
|
|
||||||
|
#include "../DataStructures/Restriction.h"
|
||||||
|
#include "../Util/SimpleLogger.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
#include <osrm/Coordinate.h>
|
||||||
|
|
||||||
#include <cfloat>
|
#include <cfloat>
|
||||||
@ -40,11 +44,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
ExtractorCallbacks::ExtractorCallbacks() {externalMemory = NULL; stringMap = NULL; }
|
ExtractorCallbacks::ExtractorCallbacks()
|
||||||
ExtractorCallbacks::ExtractorCallbacks(ExtractionContainers * ext, StringMap * strMap) {
|
:
|
||||||
externalMemory = ext;
|
stringMap(NULL),
|
||||||
stringMap = strMap;
|
externalMemory(NULL)
|
||||||
}
|
{ }
|
||||||
|
|
||||||
|
ExtractorCallbacks::ExtractorCallbacks(
|
||||||
|
ExtractionContainers * ext,
|
||||||
|
StringMap * strMap
|
||||||
|
) :
|
||||||
|
stringMap(strMap),
|
||||||
|
externalMemory(ext)
|
||||||
|
{ }
|
||||||
|
|
||||||
ExtractorCallbacks::~ExtractorCallbacks() { }
|
ExtractorCallbacks::~ExtractorCallbacks() { }
|
||||||
|
|
||||||
@ -82,7 +94,7 @@ void ExtractorCallbacks::wayFunction(ExtractionWay &parsed_way) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Get the unique identifier for the street name
|
//Get the unique identifier for the street name
|
||||||
const StringMap::const_iterator string_map_iterator = stringMap->find(parsed_way.name);
|
const StringMap::const_iterator & string_map_iterator = stringMap->find(parsed_way.name);
|
||||||
if(stringMap->end() == string_map_iterator) {
|
if(stringMap->end() == string_map_iterator) {
|
||||||
parsed_way.nameID = externalMemory->name_list.size();
|
parsed_way.nameID = externalMemory->name_list.size();
|
||||||
externalMemory->name_list.push_back(parsed_way.name);
|
externalMemory->name_list.push_back(parsed_way.name);
|
||||||
|
@ -29,18 +29,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define EXTRACTORCALLBACKS_H_
|
#define EXTRACTORCALLBACKS_H_
|
||||||
|
|
||||||
#include "ExtractorStructs.h"
|
#include "ExtractorStructs.h"
|
||||||
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <boost/unordered_map.hpp>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
class ExtractionContainers;
|
class ExtractionContainers;
|
||||||
|
struct ExtractionWay;
|
||||||
|
struct InputRestrictionContainer;
|
||||||
|
|
||||||
|
typedef boost::unordered_map<std::string, NodeID> StringMap;
|
||||||
|
|
||||||
class ExtractorCallbacks{
|
class ExtractorCallbacks{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
StringMap * stringMap;
|
StringMap * stringMap;
|
||||||
ExtractionContainers * externalMemory;
|
ExtractionContainers * externalMemory;
|
||||||
|
|
||||||
ExtractorCallbacks();
|
ExtractorCallbacks();
|
||||||
public:
|
public:
|
||||||
explicit ExtractorCallbacks(ExtractionContainers * ext, StringMap * strMap);
|
explicit ExtractorCallbacks(
|
||||||
|
ExtractionContainers * ext,
|
||||||
|
StringMap * strMap
|
||||||
|
);
|
||||||
|
|
||||||
~ExtractorCallbacks();
|
~ExtractorCallbacks();
|
||||||
|
|
||||||
|
@ -30,63 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../DataStructures/HashTable.h"
|
#include "../DataStructures/HashTable.h"
|
||||||
#include "../DataStructures/ImportNode.h"
|
#include "../DataStructures/ImportNode.h"
|
||||||
#include "../DataStructures/QueryNode.h"
|
|
||||||
#include "../DataStructures/Restriction.h"
|
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
|
||||||
#include <osrm/Coordinate.h>
|
|
||||||
|
|
||||||
#include <boost/algorithm/string.hpp>
|
|
||||||
#include <boost/algorithm/string/regex.hpp>
|
|
||||||
#include <boost/regex.hpp>
|
|
||||||
#include <boost/unordered_map.hpp>
|
|
||||||
|
|
||||||
#include <climits>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
typedef boost::unordered_map<std::string, NodeID > StringMap;
|
|
||||||
typedef boost::unordered_map<std::string, std::pair<int, short> > StringToIntPairMap;
|
|
||||||
|
|
||||||
struct ExtractionWay {
|
|
||||||
ExtractionWay() {
|
|
||||||
Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Clear(){
|
|
||||||
id = UINT_MAX;
|
|
||||||
nameID = UINT_MAX;
|
|
||||||
path.clear();
|
|
||||||
keyVals.clear();
|
|
||||||
direction = ExtractionWay::notSure;
|
|
||||||
speed = -1;
|
|
||||||
backward_speed = -1;
|
|
||||||
duration = -1;
|
|
||||||
type = -1;
|
|
||||||
access = true;
|
|
||||||
roundabout = false;
|
|
||||||
isAccessRestricted = false;
|
|
||||||
ignoreInGrid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Directions {
|
|
||||||
notSure = 0, oneway, bidirectional, opposite
|
|
||||||
};
|
|
||||||
unsigned id;
|
|
||||||
unsigned nameID;
|
|
||||||
double speed;
|
|
||||||
double backward_speed;
|
|
||||||
double duration;
|
|
||||||
Directions direction;
|
|
||||||
std::string name;
|
|
||||||
short type;
|
|
||||||
bool access;
|
|
||||||
bool roundabout;
|
|
||||||
bool isAccessRestricted;
|
|
||||||
bool ignoreInGrid;
|
|
||||||
std::vector< NodeID > path;
|
|
||||||
HashTable<std::string, std::string> keyVals;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ExtractorRelation {
|
struct ExtractorRelation {
|
||||||
ExtractorRelation() : type(unknown){}
|
ExtractorRelation() : type(unknown){}
|
||||||
enum {
|
enum {
|
||||||
@ -95,49 +42,34 @@ struct ExtractorRelation {
|
|||||||
HashTable<std::string, std::string> keyVals;
|
HashTable<std::string, std::string> keyVals;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InternalExtractorEdge {
|
|
||||||
InternalExtractorEdge() : start(0), target(0), type(0), direction(0), speed(0), nameID(0), isRoundabout(false), ignoreInGrid(false), isDurationSet(false), isAccessRestricted(false), isContraFlow(false) {};
|
|
||||||
InternalExtractorEdge(NodeID s, NodeID t) : start(s), target(t), type(0), direction(0), speed(0), nameID(0), isRoundabout(false), ignoreInGrid(false), isDurationSet(false), isAccessRestricted(false), isContraFlow(false) { }
|
|
||||||
InternalExtractorEdge(NodeID s, NodeID t, short tp, short d, double sp): start(s), target(t), type(tp), direction(d), speed(sp), nameID(0), isRoundabout(false), ignoreInGrid(false), isDurationSet(false), isAccessRestricted(false), isContraFlow(false) { }
|
|
||||||
InternalExtractorEdge(NodeID s, NodeID t, short tp, short d, double sp, unsigned nid, bool isra, bool iing, bool ids, bool iar): start(s), target(t), type(tp), direction(d), speed(sp), nameID(nid), isRoundabout(isra), ignoreInGrid(iing), isDurationSet(ids), isAccessRestricted(iar), isContraFlow(false) {
|
|
||||||
assert(0 <= type);
|
|
||||||
}
|
|
||||||
InternalExtractorEdge(NodeID s, NodeID t, short tp, short d, double sp, unsigned nid, bool isra, bool iing, bool ids, bool iar, bool icf): start(s), target(t), type(tp), direction(d), speed(sp), nameID(nid), isRoundabout(isra), ignoreInGrid(iing), isDurationSet(ids), isAccessRestricted(iar), isContraFlow(icf) {
|
|
||||||
assert(0 <= type);
|
|
||||||
}
|
|
||||||
NodeID start;
|
|
||||||
NodeID target;
|
|
||||||
short type;
|
|
||||||
short direction;
|
|
||||||
double speed;
|
|
||||||
unsigned nameID;
|
|
||||||
bool isRoundabout;
|
|
||||||
bool ignoreInGrid;
|
|
||||||
bool isDurationSet;
|
|
||||||
bool isAccessRestricted;
|
|
||||||
bool isContraFlow;
|
|
||||||
|
|
||||||
FixedPointCoordinate startCoord;
|
|
||||||
FixedPointCoordinate targetCoord;
|
|
||||||
|
|
||||||
static InternalExtractorEdge min_value() {
|
|
||||||
return InternalExtractorEdge(0,0);
|
|
||||||
}
|
|
||||||
static InternalExtractorEdge max_value() {
|
|
||||||
return InternalExtractorEdge((std::numeric_limits<unsigned>::max)(), (std::numeric_limits<unsigned>::max)());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct _WayIDStartAndEndEdge {
|
struct _WayIDStartAndEndEdge {
|
||||||
unsigned wayID;
|
unsigned wayID;
|
||||||
NodeID firstStart;
|
NodeID firstStart;
|
||||||
NodeID firstTarget;
|
NodeID firstTarget;
|
||||||
NodeID lastStart;
|
NodeID lastStart;
|
||||||
NodeID lastTarget;
|
NodeID lastTarget;
|
||||||
_WayIDStartAndEndEdge() : wayID(UINT_MAX), firstStart(UINT_MAX), firstTarget(UINT_MAX), lastStart(UINT_MAX), lastTarget(UINT_MAX) {}
|
_WayIDStartAndEndEdge()
|
||||||
_WayIDStartAndEndEdge(unsigned w, NodeID fs, NodeID ft, NodeID ls, NodeID lt) : wayID(w), firstStart(fs), firstTarget(ft), lastStart(ls), lastTarget(lt) {}
|
:
|
||||||
|
wayID(UINT_MAX),
|
||||||
|
firstStart(UINT_MAX),
|
||||||
|
firstTarget(UINT_MAX),
|
||||||
|
lastStart(UINT_MAX),
|
||||||
|
lastTarget(UINT_MAX)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
explicit _WayIDStartAndEndEdge(
|
||||||
|
unsigned w,
|
||||||
|
NodeID fs,
|
||||||
|
NodeID ft,
|
||||||
|
NodeID ls,
|
||||||
|
NodeID lt
|
||||||
|
) :
|
||||||
|
wayID(w),
|
||||||
|
firstStart(fs),
|
||||||
|
firstTarget(ft),
|
||||||
|
lastStart(ls),
|
||||||
|
lastTarget(lt)
|
||||||
|
{ }
|
||||||
|
|
||||||
static _WayIDStartAndEndEdge min_value() {
|
static _WayIDStartAndEndEdge min_value() {
|
||||||
return _WayIDStartAndEndEdge((std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)());
|
return _WayIDStartAndEndEdge((std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)(), (std::numeric_limits<unsigned>::min)());
|
||||||
@ -147,9 +79,12 @@ struct _WayIDStartAndEndEdge {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmpWayByID : public std::binary_function<_WayIDStartAndEndEdge, _WayIDStartAndEndEdge, bool> {
|
struct CmpWayByID {
|
||||||
typedef _WayIDStartAndEndEdge value_type;
|
typedef _WayIDStartAndEndEdge value_type;
|
||||||
bool operator () (const _WayIDStartAndEndEdge & a, const _WayIDStartAndEndEdge & b) const {
|
bool operator ()(
|
||||||
|
const _WayIDStartAndEndEdge & a,
|
||||||
|
const _WayIDStartAndEndEdge & b
|
||||||
|
) const {
|
||||||
return a.wayID < b.wayID;
|
return a.wayID < b.wayID;
|
||||||
}
|
}
|
||||||
value_type max_value() {
|
value_type max_value() {
|
||||||
@ -160,9 +95,12 @@ struct CmpWayByID : public std::binary_function<_WayIDStartAndEndEdge, _WayIDSta
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cmp : public std::binary_function<NodeID, NodeID, bool> {
|
struct Cmp {
|
||||||
typedef NodeID value_type;
|
typedef NodeID value_type;
|
||||||
bool operator () (const NodeID a, const NodeID b) const {
|
bool operator ()(
|
||||||
|
const NodeID a,
|
||||||
|
const NodeID b
|
||||||
|
) const {
|
||||||
return a < b;
|
return a < b;
|
||||||
}
|
}
|
||||||
value_type max_value() {
|
value_type max_value() {
|
||||||
@ -173,7 +111,7 @@ struct Cmp : public std::binary_function<NodeID, NodeID, bool> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmpNodeByID : public std::binary_function<ExternalMemoryNode, ExternalMemoryNode, bool> {
|
struct CmpNodeByID {
|
||||||
typedef ExternalMemoryNode value_type;
|
typedef ExternalMemoryNode value_type;
|
||||||
bool operator () (
|
bool operator () (
|
||||||
const ExternalMemoryNode & a,
|
const ExternalMemoryNode & a,
|
||||||
@ -189,44 +127,4 @@ struct CmpNodeByID : public std::binary_function<ExternalMemoryNode, ExternalMem
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmpEdgeByStartID : public std::binary_function<InternalExtractorEdge, InternalExtractorEdge, bool> {
|
|
||||||
typedef InternalExtractorEdge value_type;
|
|
||||||
bool operator () (const InternalExtractorEdge & a, const InternalExtractorEdge & b) const {
|
|
||||||
return a.start < b.start;
|
|
||||||
}
|
|
||||||
value_type max_value() {
|
|
||||||
return InternalExtractorEdge::max_value();
|
|
||||||
}
|
|
||||||
value_type min_value() {
|
|
||||||
return InternalExtractorEdge::min_value();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct CmpEdgeByTargetID : public std::binary_function<InternalExtractorEdge, InternalExtractorEdge, bool> {
|
|
||||||
typedef InternalExtractorEdge value_type;
|
|
||||||
bool operator () (const InternalExtractorEdge & a, const InternalExtractorEdge & b) const {
|
|
||||||
return a.target < b.target;
|
|
||||||
}
|
|
||||||
value_type max_value() {
|
|
||||||
return InternalExtractorEdge::max_value();
|
|
||||||
}
|
|
||||||
value_type min_value() {
|
|
||||||
return InternalExtractorEdge::min_value();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline std::string GetRandomString() {
|
|
||||||
char s[128];
|
|
||||||
static const char alphanum[] =
|
|
||||||
"0123456789"
|
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
||||||
"abcdefghijklmnopqrstuvwxyz";
|
|
||||||
|
|
||||||
for (int i = 0; i < 127; ++i) {
|
|
||||||
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
|
|
||||||
}
|
|
||||||
s[127] = 0;
|
|
||||||
return std::string(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* EXTRACTORSTRUCTS_H_ */
|
#endif /* EXTRACTORSTRUCTS_H_ */
|
||||||
|
207
Extractor/InternalExtractorEdge.h
Normal file
207
Extractor/InternalExtractorEdge.h
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INTERNAL_EXTRACTOR_EDGE_H
|
||||||
|
#define INTERNAL_EXTRACTOR_EDGE_H
|
||||||
|
|
||||||
|
#include <osrm/Coordinate.h>
|
||||||
|
|
||||||
|
#include "../typedefs.h"
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
struct InternalExtractorEdge {
|
||||||
|
InternalExtractorEdge()
|
||||||
|
:
|
||||||
|
start(0),
|
||||||
|
target(0),
|
||||||
|
type(0),
|
||||||
|
direction(0),
|
||||||
|
speed(0),
|
||||||
|
nameID(0),
|
||||||
|
isRoundabout(false),
|
||||||
|
ignoreInGrid(false),
|
||||||
|
isDurationSet(false),
|
||||||
|
isAccessRestricted(false),
|
||||||
|
isContraFlow(false)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
explicit InternalExtractorEdge(NodeID start, NodeID target)
|
||||||
|
:
|
||||||
|
start(start),
|
||||||
|
target(target),
|
||||||
|
type(0),
|
||||||
|
direction(0),
|
||||||
|
speed(0),
|
||||||
|
nameID(0),
|
||||||
|
isRoundabout(false),
|
||||||
|
ignoreInGrid(false),
|
||||||
|
isDurationSet(false),
|
||||||
|
isAccessRestricted(false),
|
||||||
|
isContraFlow(false)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
explicit InternalExtractorEdge(
|
||||||
|
NodeID start,
|
||||||
|
NodeID target,
|
||||||
|
short type,
|
||||||
|
short d,
|
||||||
|
double speed
|
||||||
|
) :
|
||||||
|
start(start),
|
||||||
|
target(target),
|
||||||
|
type(type),
|
||||||
|
direction(d),
|
||||||
|
speed(speed),
|
||||||
|
nameID(0),
|
||||||
|
isRoundabout(false),
|
||||||
|
ignoreInGrid(false),
|
||||||
|
isDurationSet(false),
|
||||||
|
isAccessRestricted(false),
|
||||||
|
isContraFlow(false)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
explicit InternalExtractorEdge(
|
||||||
|
NodeID start,
|
||||||
|
NodeID target,
|
||||||
|
short type,
|
||||||
|
short direction,
|
||||||
|
double speed,
|
||||||
|
unsigned nameID,
|
||||||
|
bool isRoundabout,
|
||||||
|
bool ignoreInGrid,
|
||||||
|
bool isDurationSet,
|
||||||
|
bool isAccressRestricted
|
||||||
|
) :
|
||||||
|
start(start),
|
||||||
|
target(target),
|
||||||
|
type(type),
|
||||||
|
direction(direction),
|
||||||
|
speed(speed),
|
||||||
|
nameID(nameID),
|
||||||
|
isRoundabout(isRoundabout),
|
||||||
|
ignoreInGrid(ignoreInGrid),
|
||||||
|
isDurationSet(isDurationSet),
|
||||||
|
isAccessRestricted(isAccressRestricted),
|
||||||
|
isContraFlow(false)
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(0 <= type);
|
||||||
|
}
|
||||||
|
|
||||||
|
explicit InternalExtractorEdge(
|
||||||
|
NodeID start,
|
||||||
|
NodeID target,
|
||||||
|
short type,
|
||||||
|
short direction,
|
||||||
|
double speed,
|
||||||
|
unsigned nameID,
|
||||||
|
bool isRoundabout,
|
||||||
|
bool ignoreInGrid,
|
||||||
|
bool isDurationSet,
|
||||||
|
bool isAccressRestricted,
|
||||||
|
bool isContraFlow
|
||||||
|
) :
|
||||||
|
start(start),
|
||||||
|
target(target),
|
||||||
|
type(type),
|
||||||
|
direction(direction),
|
||||||
|
speed(speed),
|
||||||
|
nameID(nameID),
|
||||||
|
isRoundabout(isRoundabout),
|
||||||
|
ignoreInGrid(ignoreInGrid),
|
||||||
|
isDurationSet(isDurationSet),
|
||||||
|
isAccessRestricted(isAccressRestricted),
|
||||||
|
isContraFlow(isContraFlow)
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(0 <= type);
|
||||||
|
}
|
||||||
|
|
||||||
|
// necessary static util functions for stxxl's sorting
|
||||||
|
static InternalExtractorEdge min_value() {
|
||||||
|
return InternalExtractorEdge(0,0);
|
||||||
|
}
|
||||||
|
static InternalExtractorEdge max_value() {
|
||||||
|
return InternalExtractorEdge(
|
||||||
|
std::numeric_limits<unsigned>::max(),
|
||||||
|
std::numeric_limits<unsigned>::max()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeID start;
|
||||||
|
NodeID target;
|
||||||
|
short type;
|
||||||
|
short direction;
|
||||||
|
double speed;
|
||||||
|
unsigned nameID;
|
||||||
|
bool isRoundabout;
|
||||||
|
bool ignoreInGrid;
|
||||||
|
bool isDurationSet;
|
||||||
|
bool isAccessRestricted;
|
||||||
|
bool isContraFlow;
|
||||||
|
|
||||||
|
FixedPointCoordinate startCoord;
|
||||||
|
FixedPointCoordinate targetCoord;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CmpEdgeByStartID {
|
||||||
|
typedef InternalExtractorEdge value_type;
|
||||||
|
bool operator ()(
|
||||||
|
const InternalExtractorEdge & a,
|
||||||
|
const InternalExtractorEdge & b
|
||||||
|
) const {
|
||||||
|
return a.start < b.start;
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type max_value() {
|
||||||
|
return InternalExtractorEdge::max_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type min_value() {
|
||||||
|
return InternalExtractorEdge::min_value();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CmpEdgeByTargetID {
|
||||||
|
typedef InternalExtractorEdge value_type;
|
||||||
|
|
||||||
|
bool operator ()(
|
||||||
|
const InternalExtractorEdge & a,
|
||||||
|
const InternalExtractorEdge & b
|
||||||
|
) const {
|
||||||
|
return a.target < b.target;
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type max_value() {
|
||||||
|
return InternalExtractorEdge::max_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type min_value() {
|
||||||
|
return InternalExtractorEdge::min_value();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INTERNAL_EXTRACTOR_EDGE_H
|
@ -25,12 +25,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ExtractorCallbacks.h"
|
|
||||||
#include "ExtractorStructs.h"
|
|
||||||
#include "PBFParser.h"
|
#include "PBFParser.h"
|
||||||
|
|
||||||
|
#include "ExtractionWay.h"
|
||||||
|
#include "ExtractorCallbacks.h"
|
||||||
#include "ScriptingEnvironment.h"
|
#include "ScriptingEnvironment.h"
|
||||||
|
|
||||||
#include "../DataStructures/HashTable.h"
|
#include "../DataStructures/HashTable.h"
|
||||||
|
#include "../DataStructures/Restriction.h"
|
||||||
#include "../Util/MachineInfo.h"
|
#include "../Util/MachineInfo.h"
|
||||||
#include "../Util/OpenMPWrapper.h"
|
#include "../Util/OpenMPWrapper.h"
|
||||||
#include "../Util/OSRMException.h"
|
#include "../Util/OSRMException.h"
|
||||||
|
@ -25,9 +25,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ExtractionHelperFunctions.h"
|
|
||||||
#include "ExtractorStructs.h"
|
|
||||||
#include "ScriptingEnvironment.h"
|
#include "ScriptingEnvironment.h"
|
||||||
|
|
||||||
|
#include "ExtractionHelperFunctions.h"
|
||||||
|
#include "ExtractionWay.h"
|
||||||
#include "../DataStructures/ImportNode.h"
|
#include "../DataStructures/ImportNode.h"
|
||||||
#include "../Util/LuaUtil.h"
|
#include "../Util/LuaUtil.h"
|
||||||
#include "../Util/OpenMPWrapper.h"
|
#include "../Util/OpenMPWrapper.h"
|
||||||
|
@ -27,9 +27,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "XMLParser.h"
|
#include "XMLParser.h"
|
||||||
|
|
||||||
#include "ExtractorStructs.h"
|
#include "ExtractionWay.h"
|
||||||
#include "../DataStructures/HashTable.h"
|
#include "../DataStructures/HashTable.h"
|
||||||
|
#include "../DataStructures/ImportNode.h"
|
||||||
#include "../DataStructures/InputReaderFactory.h"
|
#include "../DataStructures/InputReaderFactory.h"
|
||||||
|
#include "../DataStructures/Restriction.h"
|
||||||
#include "../Util/SimpleLogger.h"
|
#include "../Util/SimpleLogger.h"
|
||||||
#include "../Util/StringUtil.h"
|
#include "../Util/StringUtil.h"
|
||||||
#include "../typedefs.h"
|
#include "../typedefs.h"
|
||||||
|
@ -184,4 +184,18 @@ inline bool StringStartsWith(
|
|||||||
return boost::starts_with(input, prefix);
|
return boost::starts_with(input, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string GetRandomString() {
|
||||||
|
char s[128];
|
||||||
|
static const char alphanum[] =
|
||||||
|
"0123456789"
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
"abcdefghijklmnopqrstuvwxyz";
|
||||||
|
|
||||||
|
for (int i = 0; i < 127; ++i) {
|
||||||
|
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
|
||||||
|
}
|
||||||
|
s[127] = 0;
|
||||||
|
return std::string(s);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* STRINGUTIL_H_ */
|
#endif /* STRINGUTIL_H_ */
|
||||||
|
@ -37,6 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "Util/ProgramOptions.h"
|
#include "Util/ProgramOptions.h"
|
||||||
#include "Util/SimpleLogger.h"
|
#include "Util/SimpleLogger.h"
|
||||||
#include "Util/StringUtil.h"
|
#include "Util/StringUtil.h"
|
||||||
|
#include "Util/TimingUtil.h"
|
||||||
#include "Util/UUID.h"
|
#include "Util/UUID.h"
|
||||||
#include "typedefs.h"
|
#include "typedefs.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user