Imported Upstream version 1.5.1
[routino] / src / functions.h
1 /***************************************
2  $Header: /home/amb/routino/src/RCS/functions.h,v 1.58 2010/09/25 13:54:18 amb Exp $
3
4  Header file for function prototypes
5
6  Part of the Routino routing software.
7  ******************/ /******************
8  This file Copyright 2008-2010 Andrew M. Bishop
9
10  This program is free software: you can redistribute it and/or modify
11  it under the terms of the GNU Affero General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU Affero General Public License for more details.
19
20  You should have received a copy of the GNU Affero General Public License
21  along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  ***************************************/
23
24
25 #ifndef FUNCTIONS_H
26 #define FUNCTIONS_H    /*+ To stop multiple inclusions. +*/
27
28 #include "types.h"
29
30 #include "profiles.h"
31 #include "results.h"
32
33
34 /*+ The number of waypoints allowed to be specified. +*/
35 #define NWAYPOINTS 99
36
37
38 /* In fakes.c */
39
40 /*+ Return true if this is a fake node. +*/
41 #define IsFakeNode(xxx)    ((xxx)>=NODE_FAKE)
42
43 /*+ Return true if this is a fake segment. +*/
44 #define IsFakeSegment(xxx) ((xxx)>=SEGMENT_FAKE)
45
46 index_t CreateFakes(Nodes *nodes,int point,Segment *segment,index_t node1,index_t node2,distance_t dist1,distance_t dist2);
47
48 void GetFakeLatLong(index_t node, double *latitude,double *longitude);
49
50 Segment *FirstFakeSegment(index_t node);
51 Segment *NextFakeSegment(Segment *segment,index_t node);
52 Segment *ExtraFakeSegment(index_t node,index_t fakenode);
53
54 Segment *LookupFakeSegment(index_t index);
55 index_t IndexFakeSegment(Segment *segment);
56
57
58 /* In optimiser.c */
59
60 Results *FindNormalRoute(Nodes *nodes,Segments *segments,Ways *ways,index_t start,index_t finish,Profile *profile);
61 Results *FindMiddleRoute(Nodes *supernodes,Segments *supersegments,Ways *superways,Results *begin,Results *end,Profile *profile);
62
63 Results *FindStartRoutes(Nodes *nodes,Segments *segments,Ways *ways,index_t start,Profile *profile);
64 Results *FindFinishRoutes(Nodes *nodes,Segments *segments,Ways *ways,index_t finish,Profile *profile);
65
66 Results *CombineRoutes(Results *results,Nodes *nodes,Segments *segments,Ways *ways,Profile *profile);
67
68 void FixForwardRoute(Results *results,index_t finish);
69
70
71 /* In output.c */
72
73 void PrintRoute(Results **results,int nresults,Nodes *nodes,Segments *segments,Ways *ways,Profile *profile);
74
75
76 /* In sorting.c */
77
78 /*+ The type, size and alignment of variable to store the variable length +*/
79 #define FILESORT_VARINT   unsigned short
80 #define FILESORT_VARSIZE  sizeof(FILESORT_VARINT)
81 #define FILESORT_VARALIGN sizeof(void*)
82
83 void filesort_fixed(int fd_in,int fd_out,size_t itemsize,int (*compare)(const void*,const void*),int (*buildindex)(void*,index_t));
84
85 void filesort_vary(int fd_in,int fd_out,int (*compare)(const void*,const void*),int (*buildindex)(void*,index_t));
86
87 void filesort_heapsort(void **datap,size_t nitems,int(*compare)(const void*, const void*));
88
89
90 #endif /* FUNCTIONS_H */