PGROUTING  3.2
trsp_core.cpp
Go to the documentation of this file.
1 /*PGR-GNU*****************************************************************
2 
3 File: trsp_core.cpp
4 
5 Generated with Template by:
6 Copyright (c) 2015 pgRouting developers
8 
9 ------
10 
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15 
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20 
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 
25  ********************************************************************PGR-GNU*/
26 
27 #ifdef __MINGW32__
28 #include <winsock2.h>
29 #include <windows.h>
30 #endif
31 
32 #include <vector>
33 #include <utility>
34 #include "trsp/GraphDefinition.h"
35 
36 
38  edge_t *edges,
39  size_t edge_count,
40  restrict_t *restricts,
41  size_t restrict_count,
42  int64_t start_edge,
43  double start_pos,
44  int64_t end_edge,
45  double end_pos,
46  bool directed,
47  bool has_reverse_cost,
48  path_element_tt **path,
49  size_t *path_count,
50  char **err_msg
51  ) {
52  try {
53  std::vector<PDVI> ruleTable;
54 
55  size_t i, j;
56  ruleTable.clear();
57  for (i = 0; i < restrict_count; i++) {
58  std::vector<int64> seq;
59  seq.clear();
60  seq.push_back(restricts[i].target_id);
61  for (j = 0; j < MAX_RULE_LENGTH && restricts[i].via[j] >- 1; j++) {
62  seq.push_back(restricts[i].via[j]);
63  }
64  ruleTable.push_back(make_pair(restricts[i].to_cost, seq));
65  }
66 
67  GraphDefinition gdef;
68  auto res = gdef.my_dijkstra1(edges, edge_count, start_edge, start_pos,
69  end_edge, end_pos, directed, has_reverse_cost, path, path_count,
70  err_msg, ruleTable);
71 
72 
73  if (res < 0)
74  return res;
75  else
76  return EXIT_SUCCESS;
77  }
78  catch(std::exception& e) {
79  *err_msg = const_cast<char *>(e.what());
80  return -1;
81  }
82  catch(...) {
83  *err_msg = const_cast<char *>("Caught unknown exception!");
84  return -1;
85  }
86 }
edge_t
Definition: trsp_types.h:37
path_element
Definition: trsp.h:56
restrict_struct
Definition: trsp.h:49
MAX_RULE_LENGTH
#define MAX_RULE_LENGTH
Definition: trsp.h:29
GraphDefinition.h
trsp_edge_wrapper
int trsp_edge_wrapper(edge_t *edges, size_t edge_count, restrict_t *restricts, size_t restrict_count, int64_t start_edge, double start_pos, int64_t end_edge, double end_pos, bool directed, bool has_reverse_cost, path_element_tt **path, size_t *path_count, char **err_msg)
Definition: trsp_core.cpp:37
GraphDefinition::my_dijkstra1
int my_dijkstra1(edge_t *edges, size_t edge_count, int64 start_edge, double start_part, int64 end_edge, double end_part, bool directed, bool has_reverse_cost, path_element_tt **path, size_t *path_count, char **err_msg, std::vector< PDVI > &ruleList)
Definition: GraphDefinition.cpp:210
restrict_struct::via
int via[5]
Definition: trsp.h:52
GraphDefinition
Definition: GraphDefinition.h:115