| 146 | | //Vertex ids renumbering moved here |
|---|
| 147 | | src = edges_array[j].source; |
|---|
| 148 | | trg = edges_array[j].target; |
|---|
| 149 | | |
|---|
| 150 | | if(vertices[src]==0) |
|---|
| 151 | | { |
|---|
| 152 | | vertices[src]=j+offset; |
|---|
| | 146 | //Vertex ids renumbering moved here |
|---|
| | 147 | src = edges[j]->GetFieldAsInteger(SOURCE_FEATURE); |
|---|
| | 148 | trg = edges[j]->GetFieldAsInteger(TARGET_FEATURE); |
|---|
| | 149 | |
|---|
| | 150 | if(vertices[src]==0) |
|---|
| | 151 | { |
|---|
| | 152 | vertices[src]=j+offset; |
|---|
| | 153 | } |
|---|
| | 154 | edges[j]->SetField(SOURCE_FEATURE, vertices[src]); |
|---|
| | 155 | |
|---|
| | 156 | if(vertices[trg]==0) |
|---|
| | 157 | { |
|---|
| | 158 | offset++; |
|---|
| | 159 | vertices[trg]=j+offset; |
|---|
| | 160 | } |
|---|
| | 161 | edges[j]->SetField(TARGET_FEATURE, vertices[trg]); |
|---|
| | 162 | |
|---|
| | 163 | for(z=0; z<edges[j]->GetFieldAsIntegerList(RULE_FEATURE).size();++z) |
|---|
| | 164 | { |
|---|
| | 165 | if(edges[j]->GetFieldAsIntegerList(RULE_FEATURE)[z] > 0) |
|---|
| | 166 | { |
|---|
| | 167 | rule.push_back(edges[j]->GetFieldAsIntegerList(RULE_FEATURE)[z]); |
|---|
| | 168 | } |
|---|
| | 169 | } |
|---|
| | 170 | |
|---|
| | 171 | if(edges[j]->GetFieldAsDouble(TO_COST_FEATURE) > 0) |
|---|
| | 172 | { |
|---|
| | 173 | adjacent_edges[edges[j]->GetFieldAsInteger(ID_FEATURE)].push_back( |
|---|
| | 174 | std::pair<float8, vector<int> > (GetFieldAsDouble(TO_COST_FEATURE), rule) ); |
|---|
| | 175 | rule.clear(); |
|---|
| | 176 | } |
|---|
| | 177 | |
|---|
| | 178 | if((j < count-1 && edges[j]->GetFieldAsInteger(ID_FEATURE) != edges[j+1]->GetFieldAsInteger(ID_FEATURE))||(j==count-1)) |
|---|
| | 179 | { |
|---|
| | 180 | |
|---|
| | 181 | bool inserted = addEdge(e, edges[j], graph); |
|---|
| | 182 | |
|---|
| | 183 | graph[*e].cost = edges[j]->GetFieldAsDouble(COST_FEATURE);//set cost |
|---|
| | 184 | graph[*e].id = j;//set id |
|---|
| | 185 | |
|---|
| | 186 | |
|---|
| | 187 | if (!IsDirected() || (IsDirected() && HasReverseCost())) |
|---|
| | 188 | { |
|---|
| | 189 | |
|---|
| | 190 | if(adjacent_edges[edges_array[j].id].size() > 0) |
|---|
| | 191 | { |
|---|
| | 192 | adjacent_edges[edges[j]->GetFieldAsInteger(ID_FEATURE)+e_max_id].assign( |
|---|
| | 193 | adjacent_edges[edges[j]->GetFieldAsInteger(ID_FEATURE)].begin(), |
|---|
| | 194 | adjacent_edges[edges[j]->GetFieldAsInteger(ID_FEATURE)].end() ); |
|---|
| | 195 | adjacent_edges.erase(edges[j]->GetFieldAsInteger(ID_FEATURE)); |
|---|
| | 196 | } |
|---|
| | 197 | |
|---|
| | 198 | edge_descriptor *er; |
|---|
| | 199 | //adding an edge for opposite direction |
|---|
| | 200 | bool inserted = addEdge(er, edges[j], graph); |
|---|
| | 201 | |
|---|
| | 202 | graph[*er].id = j;//set id |
|---|
| | 203 | |
|---|
| | 204 | if (HasReverseCost()) |
|---|
| | 205 | { |
|---|
| | 206 | graph[*er].cost = edges[j]->GetFieldAsDouble(RC_FEATURE);//set reverse cost |
|---|
| | 207 | } |
|---|
| | 208 | else |
|---|
| | 209 | { |
|---|
| | 210 | graph[*er].cost = edges[j]->GetFieldAsDouble(COST_FEATURE);//set cost |
|---|
| | 211 | } |
|---|
| | 212 | |
|---|
| | 213 | } |
|---|
| | 214 | |
|---|
| | 215 | adjacent_edges.clear(); |
|---|
| | 216 | rule_num = 0; |
|---|
| | 217 | } |
|---|
| | 218 | else |
|---|
| | 219 | { |
|---|
| | 220 | rule_num++; |
|---|
| | 221 | } |
|---|
| 154 | | edges_array[j].source=vertices[src]; |
|---|
| 155 | | |
|---|
| 156 | | if(vertices[trg]==0) |
|---|
| 157 | | { |
|---|
| 158 | | offset++; |
|---|
| 159 | | vertices[trg]=j+offset; |
|---|
| 160 | | } |
|---|
| 161 | | edges_array[j].target=vertices[trg]; |
|---|
| 162 | | |
|---|
| 163 | | for(z=0; z<MAX_RULE_LENGTH;++z) |
|---|
| 164 | | { |
|---|
| 165 | | if(edges_array[j].rule[z] > 0) |
|---|
| 166 | | { |
|---|
| 167 | | rule.push_back(edges_array[j].rule[z]); |
|---|
| 168 | | } |
|---|
| 169 | | } |
|---|
| 170 | | |
|---|
| 171 | | if(edges_array[j].to_cost > 0) |
|---|
| 172 | | { |
|---|
| 173 | | adjacent_edges[edges_array[j].id].push_back(std::pair<float8, vector<int> > (edges_array[j].to_cost, rule) ); |
|---|
| 174 | | rule.clear(); |
|---|
| 175 | | } |
|---|
| 176 | | |
|---|
| 177 | | if((j < count-1 && edges_array[j].id != edges_array[j+1].id)||(j==count-1)) |
|---|
| 178 | | { |
|---|
| 179 | | |
|---|
| 180 | | bool inserted = addEdge(e, edges[j], graph); |
|---|
| 181 | | |
|---|
| 182 | | graph[*e].cost = edges[j]->GetFieldAsDouble(COST_FEATURE);//set cost |
|---|
| 183 | | graph[*e].id = j;//set id |
|---|
| 184 | | |
|---|
| 185 | | |
|---|
| 186 | | if (!IsDirected() || (IsDirected() && HasReverseCost())) |
|---|
| 187 | | { |
|---|
| 188 | | |
|---|
| 189 | | if(adjacent_edges[edges_array[j].id].size() > 0) |
|---|
| 190 | | { |
|---|
| 191 | | adjacent_edges[edges_array[j].id+e_max_id].assign( adjacent_edges[edges_array[j].id].begin(), adjacent_edges[edges_array[j].id].end() ); |
|---|
| 192 | | adjacent_edges.erase(edges_array[j].id); |
|---|
| 193 | | } |
|---|
| 194 | | |
|---|
| 195 | | edge_descriptor *er; |
|---|
| 196 | | //adding an edge for opposite direction |
|---|
| 197 | | bool inserted = addEdge(er, edges[j], graph); |
|---|
| 198 | | |
|---|
| 199 | | graph[*er].id = j;//set id |
|---|
| 200 | | |
|---|
| 201 | | if (HasReverseCost()) |
|---|
| 202 | | { |
|---|
| 203 | | graph[*er].cost = edges[j]->GetFieldAsDouble(RC_FEATURE);//set reverse cost |
|---|
| 204 | | } |
|---|
| 205 | | else |
|---|
| 206 | | { |
|---|
| 207 | | graph[*er].cost = edges[j]->GetFieldAsDouble(COST_FEATURE);//set cost |
|---|
| 208 | | } |
|---|
| 209 | | |
|---|
| 210 | | } |
|---|
| 211 | | |
|---|
| 212 | | adjacent_edges.clear(); |
|---|
| 213 | | rule_num = 0; |
|---|
| 214 | | } |
|---|
| 215 | | else |
|---|
| 216 | | { |
|---|
| 217 | | rule_num++; |
|---|
| 218 | | } |
|---|
| 219 | | } |
|---|