Routino SVN Repository Browser

Check out the latest version of Routino: svn co http://routino.org/svn/trunk routino

ViewVC logotype

Contents of /trunk/src/relationsx.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2033 - (show annotations) (download) (as text)
Thu Oct 10 17:33:51 2019 UTC (5 years, 5 months ago) by amb
File MIME type: text/x-chdr
File size: 5278 byte(s)
Reduce memory consumption by writing the index to a file and mapping
it in to memory rather than allocating large amounts of memory.

1 /***************************************
2 A header file for the extended Relations structure.
3
4 Part of the Routino routing software.
5 ******************/ /******************
6 This file Copyright 2010-2015, 2019 Andrew M. Bishop
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU Affero General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU Affero General Public License for more details.
17
18 You should have received a copy of the GNU Affero General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ***************************************/
21
22
23 #ifndef RELATIONSX_H
24 #define RELATIONSX_H /*+ To stop multiple inclusions. +*/
25
26 #include <stdint.h>
27
28 #include "types.h"
29
30 #include "typesx.h"
31
32
33 /* Data structures */
34
35
36 /*+ An extended structure containing a single route relation. +*/
37 struct _RouteRelX
38 {
39 relation_t id; /*+ The relation identifier. +*/
40
41 transports_t routes; /*+ The types of transports that that this relation is for. +*/
42 };
43
44
45 /*+ An extended structure containing a single turn restriction relation. +*/
46 struct _TurnRelX
47 {
48 relation_t id; /*+ The relation identifier. +*/
49
50 way_t from; /*+ The id of the starting way; initially the OSM value, later the SegmentX index. +*/
51 node_t via; /*+ The id of the via node; initially the OSM value, later the NodeX index. +*/
52 way_t to; /*+ The id of the ending way; initially the OSM value, later the SegmentX index. +*/
53
54 TurnRestriction restriction; /*+ The type of restriction. +*/
55 transports_t except; /*+ The types of transports that that this relation does not apply to. +*/
56 };
57
58
59 /*+ A structure containing a set of relations. +*/
60 struct _RelationsX
61 {
62 /* Route relations */
63
64 char *rrfilename; /*+ The name of the intermediate file (for the RouteRelX). +*/
65 char *rrfilename_tmp; /*+ The name of the temporary file (for the RouteRelX). +*/
66
67 int rrfd; /*+ The file descriptor of the open file (for the RouteRelX). +*/
68
69 index_t rrnumber; /*+ The number of extended route relations. +*/
70 index_t rrknumber; /*+ The number of extended route relations kept for next time. +*/
71
72 char *rrifilename_tmp; /*+ The name of the temporary file (for the ID index). +*/
73
74 int rrifd; /*+ The file descriptor of the temporary file (for the ID index). +*/
75
76 relation_t *rridata; /*+ The extended relation IDs (sorted by ID). +*/
77
78 char *rrofilename_tmp; /*+ The name of the temporary file (for the offset index). +*/
79
80 int rrofd; /*+ The file descriptor of the temporary file (for the offset index). +*/
81
82 offset_t *rrodata; /*+ The offset of the route relation in the file (used for error log). +*/
83
84 /* Turn restriction relations */
85
86 char *trfilename; /*+ The name of the intermediate file (for the TurnRelX). +*/
87 char *trfilename_tmp; /*+ The name of the temporary file (for the TurnRelX). +*/
88
89 int trfd; /*+ The file descriptor of the temporary file (for the TurnRelX). +*/
90
91 index_t trnumber; /*+ The number of extended turn restriction relations. +*/
92 index_t trknumber; /*+ The number of extended turn relations kept for next time. +*/
93
94 char *trifilename_tmp; /*+ The name of the temporary file (for the ID index). +*/
95
96 int trifd; /*+ The file descriptor of the temporary file (for the ID index). +*/
97
98 relation_t *tridata; /*+ The extended relation IDs (sorted by ID). +*/
99 };
100
101
102 /* Functions in relationsx.c */
103
104 RelationsX *NewRelationList(int append,int readonly);
105 void FreeRelationList(RelationsX *relationsx,int keep);
106
107 void AppendRouteRelationList(RelationsX* relationsx,relation_t id,
108 transports_t routes,
109 node_t *nodes,int nnodes,
110 way_t *ways,int nways,
111 relation_t *relations,int nrelations);
112 void AppendTurnRelationList(RelationsX* relationsx,relation_t id,
113 way_t from,way_t to,node_t via,
114 TurnRestriction restriction,transports_t except);
115 void FinishRelationList(RelationsX *relationsx);
116
117 index_t IndexRouteRelX(RelationsX *relationsx,relation_t id);
118 index_t IndexTurnRelX(RelationsX *relationsx,relation_t id);
119
120 void SortRelationList(RelationsX *relationsx);
121
122 void ProcessRouteRelations(RelationsX *relationsx,WaysX *waysx,int keep);
123
124 void ProcessTurnRelations(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,int keep);
125
126 void RemovePrunedTurnRelations(RelationsX *relationsx,NodesX *nodesx);
127
128 void SortTurnRelationListGeographically(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,int convert);
129
130 void SaveRelationList(RelationsX* relationsx,const char *filename);
131
132
133 #endif /* RELATIONSX_H */