Skip to content

Commit 334f1f0

Browse files
committed
Fix iterator checking assertions on Windows debug version
1 parent 9d567af commit 334f1f0

9 files changed

Lines changed: 91 additions & 56 deletions

File tree

Contractor/EdgeBasedGraphFactory.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ void EdgeBasedGraphFactory::FlushVectorToStream(
456456
std::ofstream & edge_data_file,
457457
std::vector<OriginalEdgeData> & original_edge_data_vector
458458
) const {
459+
if (original_edge_data_vector.empty()) return;
459460
edge_data_file.write(
460461
(char*)&(original_edge_data_vector[0]),
461462
original_edge_data_vector.size()*sizeof(OriginalEdgeData)

DataStructures/StaticRTree.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,9 @@ class StaticRTree : boost::noncopyable
440440
tree_node_file.read((char *)&tree_size, sizeof(uint32_t));
441441

442442
m_search_tree.resize(tree_size);
443-
tree_node_file.read((char *)&m_search_tree[0], sizeof(TreeNode) * tree_size);
443+
if (tree_size > 0) {
444+
tree_node_file.read((char *)&m_search_tree[0], sizeof(TreeNode) * tree_size);
445+
}
444446
tree_node_file.close();
445447
// open leaf node file and store thread specific pointer
446448
if (!boost::filesystem::exists(leaf_file))

Descriptors/JSONDescriptor.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,13 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
382382
shortest_segment_2 = shortestDifference[i];
383383
}
384384
}
385-
386-
std::set_difference(alternative_path_segments.begin(),
385+
std::sort(shortest_path_segments.begin(),
386+
shortest_path_segments.end(),
387+
name_id_comperator);
388+
std::sort(alternative_path_segments.begin(),
389+
alternative_path_segments.end(),
390+
name_id_comperator);
391+
std::set_difference(alternative_path_segments.begin(),
387392
alternative_path_segments.end(),
388393
shortest_path_segments.begin(),
389394
shortest_path_segments.end(),

Server/DataStructures/InternalDataFacade.h

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,13 @@ class InternalDataFacade : public BaseDataFacade<EdgeDataT> {
196196
sizeof(unsigned)
197197
);
198198

199-
m_geometry_indices.resize(number_of_indices);
200-
geometry_stream.read(
201-
(char *)&(m_geometry_indices[0]),
202-
number_of_indices*sizeof(unsigned)
203-
);
199+
m_geometry_indices.resize(number_of_indices);
200+
if (number_of_indices > 0) {
201+
geometry_stream.read(
202+
(char *)&(m_geometry_indices[0]),
203+
number_of_indices*sizeof(unsigned)
204+
);
205+
}
204206

205207
geometry_stream.read(
206208
(char *)&number_of_compressed_geometries,
@@ -210,10 +212,12 @@ class InternalDataFacade : public BaseDataFacade<EdgeDataT> {
210212
BOOST_ASSERT( m_geometry_indices.back() == number_of_compressed_geometries );
211213
m_geometry_list.resize( number_of_compressed_geometries );
212214

213-
geometry_stream.read(
214-
(char *)&(m_geometry_list[0]),
215-
number_of_compressed_geometries*sizeof(unsigned)
216-
);
215+
if (number_of_compressed_geometries > 0) {
216+
geometry_stream.read(
217+
(char *)&(m_geometry_list[0]),
218+
number_of_compressed_geometries*sizeof(unsigned)
219+
);
220+
}
217221
geometry_stream.close();
218222
}
219223

@@ -245,16 +249,20 @@ class InternalDataFacade : public BaseDataFacade<EdgeDataT> {
245249
BOOST_ASSERT_MSG(0 != number_of_chars, "name file broken");
246250

247251
m_name_begin_indices.resize(number_of_names);
248-
name_stream.read(
249-
(char*)&m_name_begin_indices[0],
250-
number_of_names*sizeof(unsigned)
251-
);
252+
if (number_of_names > 0) {
253+
name_stream.read(
254+
(char*)&m_name_begin_indices[0],
255+
number_of_names*sizeof(unsigned)
256+
);
257+
}
252258

253259
m_names_char_list.resize(number_of_chars+1); //+1 gives sentinel element
254-
name_stream.read(
255-
(char *)&m_names_char_list[0],
256-
number_of_chars*sizeof(char)
257-
);
260+
if (number_of_chars > 0) {
261+
name_stream.read(
262+
(char *)&m_names_char_list[0],
263+
number_of_chars*sizeof(char)
264+
);
265+
}
258266
BOOST_ASSERT_MSG(
259267
0 != m_names_char_list.size(),
260268
"could not load any names"

Tools/componentAnalysis.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,10 @@ int main(int argc, char *argv[])
7979
restriction_ifstream.read((char *)&usable_restriction_count, sizeof(uint32_t));
8080
restrictions_vector.resize(usable_restriction_count);
8181

82-
restriction_ifstream.read((char *)&(restrictions_vector[0]),
83-
usable_restriction_count * sizeof(TurnRestriction));
82+
if (usable_restriction_count>0) {
83+
restriction_ifstream.read((char *)&(restrictions_vector[0]),
84+
usable_restriction_count * sizeof(TurnRestriction));
85+
}
8486
restriction_ifstream.close();
8587

8688
std::ifstream input_stream;

Util/GraphLoader.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,9 @@ unsigned readHSGRFromStream(const boost::filesystem::path &hsgr_file,
306306
hsgr_input_stream.read((char *)&(node_list[0]), number_of_nodes * sizeof(NodeT));
307307

308308
edge_list.resize(number_of_edges);
309-
hsgr_input_stream.read((char *)&(edge_list[0]), number_of_edges * sizeof(EdgeT));
309+
if (number_of_edges > 0) {
310+
hsgr_input_stream.read((char *)&(edge_list[0]), number_of_edges * sizeof(EdgeT));
311+
}
310312
hsgr_input_stream.close();
311313

312314
return number_of_nodes;

Util/UUID.cpp.in

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,18 @@ UUIDC::UUIDC() : magic_number(1297240911) {
4343
std::string temp_string(__DATE__);
4444
temp_string += __TIME__;
4545

46-
std::copy(MD5PREPARE, MD5PREPARE+strlen(MD5PREPARE), md5_prepare);
47-
temp_string += md5_prepare;
48-
std::copy(MD5RTREE, MD5RTREE+32, md5_tree);
49-
temp_string += md5_tree;
50-
std::copy(MD5GRAPH, MD5GRAPH+32, md5_graph);
51-
temp_string += md5_graph;
52-
std::copy(MD5OBJECTS, MD5OBJECTS+32, md5_objects);
53-
temp_string += md5_objects;
46+
char *cMD5PREPARE = MD5PREPARE;
47+
std::copy(cMD5PREPARE, cMD5PREPARE+strlen(cMD5PREPARE), md5_prepare);
48+
temp_string += md5_prepare;
49+
char *cMD5RTREE = MD5RTREE;
50+
std::copy(cMD5RTREE, cMD5RTREE+32, md5_tree);
51+
temp_string += md5_tree;
52+
char *cMD5GRAPH = MD5GRAPH;
53+
std::copy(cMD5GRAPH, cMD5GRAPH+32, md5_graph);
54+
temp_string += md5_graph;
55+
char *cMD5OBJECTS = MD5OBJECTS;
56+
std::copy(cMD5OBJECTS, cMD5OBJECTS+32, md5_objects);
57+
temp_string += md5_objects;
5458

5559
named_uuid = gen(temp_string);
5660
has_64_bits = HAS64BITS;

datastore.cpp

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -312,17 +312,20 @@ int main( const int argc, const char * argv[] )
312312
unsigned * name_index_ptr = (unsigned*)(
313313
shared_memory_ptr + shared_layout_ptr->GetNameIndexOffset()
314314
);
315-
316-
name_stream.read(
317-
(char*)name_index_ptr,
318-
shared_layout_ptr->name_index_list_size*sizeof(unsigned)
319-
);
315+
if (shared_layout_ptr->name_index_list_size > 0) {
316+
name_stream.read(
317+
(char*)name_index_ptr,
318+
shared_layout_ptr->name_index_list_size*sizeof(unsigned)
319+
);
320+
}
320321

321322
char * name_char_ptr = shared_memory_ptr + shared_layout_ptr->GetNameListOffset();
322-
name_stream.read(
323-
name_char_ptr,
324-
shared_layout_ptr->name_char_list_size*sizeof(char)
325-
);
323+
if (shared_layout_ptr->name_char_list_size > 0) {
324+
name_stream.read(
325+
name_char_ptr,
326+
shared_layout_ptr->name_char_list_size*sizeof(char)
327+
);
328+
}
326329
name_stream.close();
327330

328331
//load original edge information
@@ -370,11 +373,12 @@ int main( const int argc, const char * argv[] )
370373
geometry_input_stream.seekg(0, geometry_input_stream.beg);
371374
geometry_input_stream.read((char *)&temporary_value, sizeof(unsigned));
372375
BOOST_ASSERT(temporary_value == shared_layout_ptr->geometries_index_list_size);
373-
374-
geometry_input_stream.read(
375-
(char *)geometries_index_ptr,
376-
shared_layout_ptr->geometries_index_list_size*sizeof(unsigned)
377-
);
376+
if (shared_layout_ptr->geometries_index_list_size > 0) {
377+
geometry_input_stream.read(
378+
(char *)geometries_index_ptr,
379+
shared_layout_ptr->geometries_index_list_size*sizeof(unsigned)
380+
);
381+
}
378382

379383
unsigned * geometries_list_ptr = (unsigned *)(
380384
shared_memory_ptr + shared_layout_ptr->GetGeometryListOffset()
@@ -383,10 +387,12 @@ int main( const int argc, const char * argv[] )
383387
geometry_input_stream.read((char *)&temporary_value, sizeof(unsigned));
384388
BOOST_ASSERT(temporary_value == shared_layout_ptr->geometries_list_size);
385389

386-
geometry_input_stream.read(
387-
(char *)geometries_list_ptr,
388-
shared_layout_ptr->geometries_list_size*sizeof(unsigned)
389-
);
390+
if (shared_layout_ptr->geometries_list_size > 0) {
391+
geometry_input_stream.read(
392+
(char *)geometries_list_ptr,
393+
shared_layout_ptr->geometries_list_size*sizeof(unsigned)
394+
);
395+
}
390396

391397
// Loading list of coordinates
392398
FixedPointCoordinate * coordinates_ptr = (FixedPointCoordinate *)(
@@ -414,8 +420,9 @@ int main( const int argc, const char * argv[] )
414420
char * rtree_ptr = static_cast<char *>(
415421
shared_memory_ptr + shared_layout_ptr->GetRSearchTreeOffset()
416422
);
417-
418-
tree_node_file.read(rtree_ptr, sizeof(RTreeNode)*tree_size);
423+
if (tree_size > 0) {
424+
tree_node_file.read(rtree_ptr, sizeof(RTreeNode)*tree_size);
425+
}
419426
tree_node_file.close();
420427

421428
// load the nodes of the search graph

prepare.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,12 @@ int main (int argc, char *argv[]) {
175175
sizeof(unsigned)
176176
);
177177
inputRestrictions.resize(usableRestrictionsCounter);
178-
restrictionsInstream.read(
179-
(char *)&(inputRestrictions[0]),
180-
usableRestrictionsCounter*sizeof(TurnRestriction)
181-
);
178+
if (usableRestrictionsCounter > 0) {
179+
restrictionsInstream.read(
180+
(char *)&(inputRestrictions[0]),
181+
usableRestrictionsCounter*sizeof(TurnRestriction)
182+
);
183+
}
182184
restrictionsInstream.close();
183185

184186
boost::filesystem::ifstream in;
@@ -384,7 +386,9 @@ int main (int argc, char *argv[]) {
384386
//serialize number of edges
385387
hsgr_output_stream.write((char*) &contracted_edge_count, sizeof(unsigned));
386388
//serialize all nodes
387-
hsgr_output_stream.write((char*) &node_array[0], sizeof(StaticGraph<EdgeData>::NodeArrayEntry)*node_array_size);
389+
if (node_array_size > 0) {
390+
hsgr_output_stream.write((char*) &node_array[0], sizeof(StaticGraph<EdgeData>::NodeArrayEntry)*node_array_size);
391+
}
388392
//serialize all edges
389393

390394
SimpleLogger().Write() << "Building edge array";

0 commit comments

Comments
 (0)