Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
CommonXMLStructure.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// Structure for common XML Parsing
19/****************************************************************************/
20#include <config.h>
21
25
26#include "CommonXMLStructure.h"
27
28
29// ===========================================================================
30// method definitions
31// ===========================================================================
32
33// ---------------------------------------------------------------------------
34// CommonXMLStructure::PlanParameters - methods
35// ---------------------------------------------------------------------------
36
38
39
41 const SUMOSAXAttributes& attrs, bool& parsedOk) {
42 if (sumoBaseObject->getParentSumoBaseObject() != nullptr) {
43 // get plan parent ID (first check if exist!)
44 const auto planParentID = sumoBaseObject->getParentSumoBaseObject()->hasStringAttribute(SUMO_ATTR_ID) ?
45 sumoBaseObject->getParentSumoBaseObject()->getStringAttribute(SUMO_ATTR_ID).c_str() : "";
46 // edges
47 fromEdge = attrs.getOpt<std::string>(SUMO_ATTR_FROM, planParentID, parsedOk, "");
48 toEdge = attrs.getOpt<std::string>(SUMO_ATTR_TO, planParentID, parsedOk, "");
49 if (toEdge.empty()) {
50 toEdge = attrs.getOpt<std::string>(SUMO_ATTR_EDGE, planParentID, parsedOk, "");
51 }
52 consecutiveEdges = attrs.getOpt<std::vector<std::string> >(SUMO_ATTR_EDGES, planParentID, parsedOk);
53 // junctions
54 fromJunction = attrs.getOpt<std::string>(SUMO_ATTR_FROM_JUNCTION, planParentID, parsedOk, "");
55 toJunction = attrs.getOpt<std::string>(SUMO_ATTR_TO_JUNCTION, planParentID, parsedOk, "");
56 // TAZs
57 fromTAZ = attrs.getOpt<std::string>(SUMO_ATTR_FROM_TAZ, planParentID, parsedOk, "");
58 toTAZ = attrs.getOpt<std::string>(SUMO_ATTR_TO_TAZ, planParentID, parsedOk, "");
59 // bus stops
60 fromBusStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_BUSSTOP, planParentID, parsedOk, "");
61 toBusStop = attrs.getOpt<std::string>(SUMO_ATTR_BUS_STOP, planParentID, parsedOk, "");
62 // train stops
63 fromTrainStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_TRAINSTOP, planParentID, parsedOk, "");
64 toTrainStop = attrs.getOpt<std::string>(SUMO_ATTR_TRAIN_STOP, planParentID, parsedOk, "");
65 // container stops
66 fromContainerStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_CONTAINERSTOP, planParentID, parsedOk, "");
67 toContainerStop = attrs.getOpt<std::string>(SUMO_ATTR_CONTAINER_STOP, planParentID, parsedOk, "");
68 // charging stations
69 fromChargingStation = attrs.getOpt<std::string>(GNE_ATTR_FROM_CHARGINGSTATION, planParentID, parsedOk, "");
70 toChargingStation = attrs.getOpt<std::string>(SUMO_ATTR_CHARGING_STATION, planParentID, parsedOk, "");
71 // parking areas
72 fromParkingArea = attrs.getOpt<std::string>(GNE_ATTR_FROM_PARKINGAREA, planParentID, parsedOk, "");
73 toParkingArea = attrs.getOpt<std::string>(SUMO_ATTR_PARKING_AREA, planParentID, parsedOk, "");
74 // routes
75 fromRoute = attrs.getOpt<std::string>(GNE_ATTR_FROM_ROUTE, planParentID, parsedOk, "");
76 toRoute = attrs.getOpt<std::string>(SUMO_ATTR_ROUTE, planParentID, parsedOk, "");
77 // update from attributes
78 updateFromAttributes(sumoBaseObject);
79 }
80}
81
82
83void
85 fromJunction.clear();
86 toJunction.clear();
87 fromEdge.clear();
88 toEdge.clear();
89 fromTAZ.clear();
90 toTAZ.clear();
91 fromBusStop.clear();
92 toBusStop.clear();
93 fromTrainStop.clear();
94 toTrainStop.clear();
95 fromContainerStop.clear();
96 toContainerStop.clear();
97 fromChargingStation.clear();
98 toChargingStation.clear();
99 fromParkingArea.clear();
100 toParkingArea.clear();
101 consecutiveEdges.clear();
102 fromRoute.clear();
103 toRoute.clear();
104}
105
106
107bool
109 if (fromEdge.empty()) {
110 return false;
111 } else {
112 return getNumberOfDefinedParameters() == 1;
113 }
114}
115
116
117int
119 return (int)consecutiveEdges.size() +
120 (fromJunction.empty() ? 0 : 1) +
121 (toJunction.empty() ? 0 : 1) +
122 (fromEdge.empty() ? 0 : 1) +
123 (toEdge.empty() ? 0 : 1) +
124 (fromTAZ.empty() ? 0 : 1) +
125 (toTAZ.empty() ? 0 : 1) +
126 (fromBusStop.empty() ? 0 : 1) +
127 (toBusStop.empty() ? 0 : 1) +
128 (fromTrainStop.empty() ? 0 : 1) +
129 (toTrainStop.empty() ? 0 : 1) +
130 (fromContainerStop.empty() ? 0 : 1) +
131 (toContainerStop.empty() ? 0 : 1) +
132 (fromChargingStation.empty() ? 0 : 1) +
133 (toChargingStation.empty() ? 0 : 1) +
134 (fromParkingArea.empty() ? 0 : 1) +
135 (toParkingArea.empty() ? 0 : 1) +
136 (fromRoute.empty() ? 0 : 1) +
137 (toRoute.empty() ? 0 : 1);
138}
139
140
141
144 if (isSingleEdgePlan()) {
146 } else if (consecutiveEdges.size() > 0) {
147 return GNE_TAG_WALK_EDGES;
148 } else if (!toRoute.empty()) {
149 return GNE_TAG_WALK_ROUTE;
150 } else if (!fromEdge.empty()) {
151 if (!toEdge.empty()) {
153 } else if (!toTAZ.empty()) {
155 } else if (!toJunction.empty()) {
157 } else if (!toBusStop.empty()) {
159 } else if (!toTrainStop.empty()) {
161 } else if (!toContainerStop.empty()) {
163 } else if (!toChargingStation.empty()) {
165 } else if (!toParkingArea.empty()) {
167 } else {
168 return SUMO_TAG_NOTHING;
169 }
170 } else if (!fromTAZ.empty()) {
171 if (!toEdge.empty()) {
173 } else if (!toTAZ.empty()) {
175 } else if (!toJunction.empty()) {
177 } else if (!toBusStop.empty()) {
179 } else if (!toTrainStop.empty()) {
181 } else if (!toContainerStop.empty()) {
183 } else if (!toChargingStation.empty()) {
185 } else if (!toParkingArea.empty()) {
187 } else {
188 return SUMO_TAG_NOTHING;
189 }
190 } else if (!fromJunction.empty()) {
191 if (!toEdge.empty()) {
193 } else if (!toTAZ.empty()) {
195 } else if (!toJunction.empty()) {
197 } else if (!toBusStop.empty()) {
199 } else if (!toTrainStop.empty()) {
201 } else if (!toContainerStop.empty()) {
203 } else if (!toChargingStation.empty()) {
205 } else if (!toParkingArea.empty()) {
207 } else {
208 return SUMO_TAG_NOTHING;
209 }
210 } else if (!fromBusStop.empty()) {
211 if (!toEdge.empty()) {
213 } else if (!toTAZ.empty()) {
215 } else if (!toJunction.empty()) {
217 } else if (!toBusStop.empty()) {
219 } else if (!toTrainStop.empty()) {
221 } else if (!toContainerStop.empty()) {
223 } else if (!toChargingStation.empty()) {
225 } else if (!toParkingArea.empty()) {
227 } else {
228 return SUMO_TAG_NOTHING;
229 }
230 } else if (!fromTrainStop.empty()) {
231 if (!toEdge.empty()) {
233 } else if (!toTAZ.empty()) {
235 } else if (!toJunction.empty()) {
237 } else if (!toBusStop.empty()) {
239 } else if (!toTrainStop.empty()) {
241 } else if (!toContainerStop.empty()) {
243 } else if (!toChargingStation.empty()) {
245 } else if (!toParkingArea.empty()) {
247 } else {
248 return SUMO_TAG_NOTHING;
249 }
250 } else if (!fromContainerStop.empty()) {
251 if (!toEdge.empty()) {
253 } else if (!toTAZ.empty()) {
255 } else if (!toJunction.empty()) {
257 } else if (!toBusStop.empty()) {
259 } else if (!toTrainStop.empty()) {
261 } else if (!toContainerStop.empty()) {
263 } else if (!toChargingStation.empty()) {
265 } else if (!toParkingArea.empty()) {
267 } else {
268 return SUMO_TAG_NOTHING;
269 }
270 } else if (!fromChargingStation.empty()) {
271 if (!toEdge.empty()) {
273 } else if (!toTAZ.empty()) {
275 } else if (!toJunction.empty()) {
277 } else if (!toBusStop.empty()) {
279 } else if (!toTrainStop.empty()) {
281 } else if (!toContainerStop.empty()) {
283 } else if (!toChargingStation.empty()) {
285 } else if (!toParkingArea.empty()) {
287 } else {
288 return SUMO_TAG_NOTHING;
289 }
290 } else if (!fromParkingArea.empty()) {
291 if (!toEdge.empty()) {
293 } else if (!toTAZ.empty()) {
295 } else if (!toJunction.empty()) {
297 } else if (!toBusStop.empty()) {
299 } else if (!toTrainStop.empty()) {
301 } else if (!toContainerStop.empty()) {
303 } else if (!toChargingStation.empty()) {
305 } else if (!toParkingArea.empty()) {
307 } else {
308 return SUMO_TAG_NOTHING;
309 }
310 } else {
311 return SUMO_TAG_NOTHING;
312 }
313}
314
315
318 if (isSingleEdgePlan()) {
320 } else if (!fromEdge.empty()) {
321 if (!toEdge.empty()) {
323 } else if (!toTAZ.empty()) {
325 } else if (!toJunction.empty()) {
327 } else if (!toBusStop.empty()) {
329 } else if (!toTrainStop.empty()) {
331 } else if (!toContainerStop.empty()) {
333 } else if (!toChargingStation.empty()) {
335 } else if (!toParkingArea.empty()) {
337 } else {
338 return SUMO_TAG_NOTHING;
339 }
340 } else if (!fromTAZ.empty()) {
341 if (!toEdge.empty()) {
343 } else if (!toTAZ.empty()) {
345 } else if (!toJunction.empty()) {
347 } else if (!toBusStop.empty()) {
349 } else if (!toTrainStop.empty()) {
351 } else if (!toContainerStop.empty()) {
353 } else if (!toChargingStation.empty()) {
355 } else if (!toParkingArea.empty()) {
357 } else {
358 return SUMO_TAG_NOTHING;
359 }
360 } else if (!fromJunction.empty()) {
361 if (!toEdge.empty()) {
363 } else if (!toTAZ.empty()) {
365 } else if (!toJunction.empty()) {
367 } else if (!toBusStop.empty()) {
369 } else if (!toTrainStop.empty()) {
371 } else if (!toContainerStop.empty()) {
373 } else if (!toChargingStation.empty()) {
375 } else if (!toParkingArea.empty()) {
377 } else {
378 return SUMO_TAG_NOTHING;
379 }
380 } else if (!fromBusStop.empty()) {
381 if (!toEdge.empty()) {
383 } else if (!toTAZ.empty()) {
385 } else if (!toJunction.empty()) {
387 } else if (!toBusStop.empty()) {
389 } else if (!toTrainStop.empty()) {
391 } else if (!toContainerStop.empty()) {
393 } else if (!toChargingStation.empty()) {
395 } else if (!toParkingArea.empty()) {
397 } else {
398 return SUMO_TAG_NOTHING;
399 }
400 } else if (!fromTrainStop.empty()) {
401 if (!toEdge.empty()) {
403 } else if (!toTAZ.empty()) {
405 } else if (!toJunction.empty()) {
407 } else if (!toBusStop.empty()) {
409 } else if (!toTrainStop.empty()) {
411 } else if (!toContainerStop.empty()) {
413 } else if (!toChargingStation.empty()) {
415 } else if (!toParkingArea.empty()) {
417 } else {
418 return SUMO_TAG_NOTHING;
419 }
420 } else if (!fromContainerStop.empty()) {
421 if (!toEdge.empty()) {
423 } else if (!toTAZ.empty()) {
425 } else if (!toJunction.empty()) {
427 } else if (!toBusStop.empty()) {
429 } else if (!toTrainStop.empty()) {
431 } else if (!toContainerStop.empty()) {
433 } else if (!toChargingStation.empty()) {
435 } else if (!toParkingArea.empty()) {
437 } else {
438 return SUMO_TAG_NOTHING;
439 }
440 } else if (!fromChargingStation.empty()) {
441 if (!toEdge.empty()) {
443 } else if (!toTAZ.empty()) {
445 } else if (!toJunction.empty()) {
447 } else if (!toBusStop.empty()) {
449 } else if (!toTrainStop.empty()) {
451 } else if (!toContainerStop.empty()) {
453 } else if (!toChargingStation.empty()) {
455 } else if (!toParkingArea.empty()) {
457 } else {
458 return SUMO_TAG_NOTHING;
459 }
460 } else if (!fromParkingArea.empty()) {
461 if (!toEdge.empty()) {
463 } else if (!toTAZ.empty()) {
465 } else if (!toJunction.empty()) {
467 } else if (!toBusStop.empty()) {
469 } else if (!toTrainStop.empty()) {
471 } else if (!toContainerStop.empty()) {
473 } else if (!toChargingStation.empty()) {
475 } else if (!toParkingArea.empty()) {
477 } else {
478 return SUMO_TAG_NOTHING;
479 }
480 } else {
481 return SUMO_TAG_NOTHING;
482 }
483}
484
485
488 if (isSingleEdgePlan()) {
490 } else if (!fromEdge.empty()) {
491 if (!toEdge.empty()) {
493 } else if (!toBusStop.empty()) {
495 } else if (!toTrainStop.empty()) {
497 } else if (!toContainerStop.empty()) {
499 } else if (!toChargingStation.empty()) {
501 } else if (!toParkingArea.empty()) {
503 } else {
504 return SUMO_TAG_NOTHING;
505 }
506 } else if (!fromBusStop.empty()) {
507 if (!toEdge.empty()) {
509 } else if (!toBusStop.empty()) {
511 } else if (!toTrainStop.empty()) {
513 } else if (!toContainerStop.empty()) {
515 } else if (!toChargingStation.empty()) {
517 } else if (!toParkingArea.empty()) {
519 } else {
520 return SUMO_TAG_NOTHING;
521 }
522 } else if (!fromTrainStop.empty()) {
523 if (!toEdge.empty()) {
525 } else if (!toBusStop.empty()) {
527 } else if (!toTrainStop.empty()) {
529 } else if (!toContainerStop.empty()) {
531 } else if (!toChargingStation.empty()) {
533 } else if (!toParkingArea.empty()) {
535 } else {
536 return SUMO_TAG_NOTHING;
537 }
538 } else if (!fromContainerStop.empty()) {
539 if (!toEdge.empty()) {
541 } else if (!toBusStop.empty()) {
543 } else if (!toTrainStop.empty()) {
545 } else if (!toContainerStop.empty()) {
547 } else if (!toChargingStation.empty()) {
549 } else if (!toParkingArea.empty()) {
551 } else {
552 return SUMO_TAG_NOTHING;
553 }
554 } else if (!fromChargingStation.empty()) {
555 if (!toEdge.empty()) {
557 } else if (!toBusStop.empty()) {
559 } else if (!toTrainStop.empty()) {
561 } else if (!toContainerStop.empty()) {
563 } else if (!toChargingStation.empty()) {
565 } else if (!toParkingArea.empty()) {
567 } else {
568 return SUMO_TAG_NOTHING;
569 }
570 } else if (!fromParkingArea.empty()) {
571 if (!toEdge.empty()) {
573 } else if (!toBusStop.empty()) {
575 } else if (!toTrainStop.empty()) {
577 } else if (!toContainerStop.empty()) {
579 } else if (!toChargingStation.empty()) {
581 } else if (!toParkingArea.empty()) {
583 } else {
584 return SUMO_TAG_NOTHING;
585 }
586 } else {
587 return SUMO_TAG_NOTHING;
588 }
589}
590
591
594 if (isSingleEdgePlan()) {
596 } else if (!fromEdge.empty()) {
597 if (!toEdge.empty()) {
599 } else if (!toBusStop.empty()) {
601 } else if (!toTrainStop.empty()) {
603 } else if (!toContainerStop.empty()) {
605 } else if (!toChargingStation.empty()) {
607 } else if (!toParkingArea.empty()) {
609 } else {
610 return SUMO_TAG_NOTHING;
611 }
612 } else if (!fromBusStop.empty()) {
613 if (!toEdge.empty()) {
615 } else if (!toBusStop.empty()) {
617 } else if (!toTrainStop.empty()) {
619 } else if (!toContainerStop.empty()) {
621 } else if (!toChargingStation.empty()) {
623 } else if (!toParkingArea.empty()) {
625 } else {
626 return SUMO_TAG_NOTHING;
627 }
628 } else if (!fromTrainStop.empty()) {
629 if (!toEdge.empty()) {
631 } else if (!toBusStop.empty()) {
633 } else if (!toTrainStop.empty()) {
635 } else if (!toContainerStop.empty()) {
637 } else if (!toChargingStation.empty()) {
639 } else if (!toParkingArea.empty()) {
641 } else {
642 return SUMO_TAG_NOTHING;
643 }
644 } else if (!fromContainerStop.empty()) {
645 if (!toEdge.empty()) {
647 } else if (!toBusStop.empty()) {
649 } else if (!toTrainStop.empty()) {
651 } else if (!toContainerStop.empty()) {
653 } else if (!toChargingStation.empty()) {
655 } else if (!toParkingArea.empty()) {
657 } else {
658 return SUMO_TAG_NOTHING;
659 }
660 } else if (!fromChargingStation.empty()) {
661 if (!toEdge.empty()) {
663 } else if (!toBusStop.empty()) {
665 } else if (!toTrainStop.empty()) {
667 } else if (!toContainerStop.empty()) {
669 } else if (!toChargingStation.empty()) {
671 } else if (!toParkingArea.empty()) {
673 } else {
674 return SUMO_TAG_NOTHING;
675 }
676 } else if (!fromParkingArea.empty()) {
677 if (!toEdge.empty()) {
679 } else if (!toBusStop.empty()) {
681 } else if (!toTrainStop.empty()) {
683 } else if (!toContainerStop.empty()) {
685 } else if (!toChargingStation.empty()) {
687 } else if (!toParkingArea.empty()) {
689 } else {
690 return SUMO_TAG_NOTHING;
691 }
692 } else {
693 return SUMO_TAG_NOTHING;
694 }
695}
696
697
700 if (isSingleEdgePlan()) {
702 } else if (consecutiveEdges.size() > 0) {
704 } else if (!fromEdge.empty()) {
705 if (!toEdge.empty()) {
707 } else if (!toBusStop.empty()) {
709 } else if (!toTrainStop.empty()) {
711 } else if (!toContainerStop.empty()) {
713 } else if (!toChargingStation.empty()) {
715 } else if (!toParkingArea.empty()) {
717 } else {
718 return SUMO_TAG_NOTHING;
719 }
720 } else if (!fromBusStop.empty()) {
721 if (!toEdge.empty()) {
723 } else if (!toBusStop.empty()) {
725 } else if (!toTrainStop.empty()) {
727 } else if (!toContainerStop.empty()) {
729 } else if (!toChargingStation.empty()) {
731 } else if (!toParkingArea.empty()) {
733 } else {
734 return SUMO_TAG_NOTHING;
735 }
736 } else if (!fromTrainStop.empty()) {
737 if (!toEdge.empty()) {
739 } else if (!toBusStop.empty()) {
741 } else if (!toTrainStop.empty()) {
743 } else if (!toContainerStop.empty()) {
745 } else if (!toChargingStation.empty()) {
747 } else if (!toParkingArea.empty()) {
749 } else {
750 return SUMO_TAG_NOTHING;
751 }
752 } else if (!fromContainerStop.empty()) {
753 if (!toEdge.empty()) {
755 } else if (!toBusStop.empty()) {
757 } else if (!toTrainStop.empty()) {
759 } else if (!toContainerStop.empty()) {
761 } else if (!toChargingStation.empty()) {
763 } else if (!toParkingArea.empty()) {
765 } else {
766 return SUMO_TAG_NOTHING;
767 }
768 } else if (!fromChargingStation.empty()) {
769 if (!toEdge.empty()) {
771 } else if (!toBusStop.empty()) {
773 } else if (!toTrainStop.empty()) {
775 } else if (!toContainerStop.empty()) {
777 } else if (!toChargingStation.empty()) {
779 } else if (!toParkingArea.empty()) {
781 } else {
782 return SUMO_TAG_NOTHING;
783 }
784 } else if (!fromParkingArea.empty()) {
785 if (!toEdge.empty()) {
787 } else if (!toBusStop.empty()) {
789 } else if (!toTrainStop.empty()) {
791 } else if (!toContainerStop.empty()) {
793 } else if (!toChargingStation.empty()) {
795 } else if (!toParkingArea.empty()) {
797 } else {
798 return SUMO_TAG_NOTHING;
799 }
800 } else {
801 return SUMO_TAG_NOTHING;
802 }
803}
804
805
808 if (!toEdge.empty()) {
810 } else if (!toBusStop.empty()) {
812 } else if (!toTrainStop.empty()) {
814 } else if (!toContainerStop.empty()) {
816 } else if (!toChargingStation.empty()) {
818 } else if (!toParkingArea.empty()) {
820 } else {
821 return SUMO_TAG_NOTHING;
822 }
823}
824
825
828 if (!toEdge.empty()) {
830 } else if (!toBusStop.empty()) {
832 } else if (!toTrainStop.empty()) {
834 } else if (!toContainerStop.empty()) {
836 } else if (!toChargingStation.empty()) {
838 } else if (!toParkingArea.empty()) {
840 } else {
841 return SUMO_TAG_NOTHING;
842 }
843}
844
845
846
849 // first check if object exist
850 if (sumoBaseObject == nullptr) {
851 return nullptr;
852 }
853 // check if object has parent
854 const CommonXMLStructure::SumoBaseObject* parentObject = sumoBaseObject->getParentSumoBaseObject();
855 if (parentObject == nullptr) {
856 return nullptr;
857 }
858 // check number of children
859 if (parentObject->getSumoBaseObjectChildren().size() < 2) {
860 return nullptr;
861 }
862 // search position of the given plan obj in the parent children
863 const auto objIterator = std::find(parentObject->getSumoBaseObjectChildren().begin(), parentObject->getSumoBaseObjectChildren().end(), sumoBaseObject);
864 // if obj is the first plan of person/container parent, then return null. If not, return previous object
865 if (objIterator == parentObject->getSumoBaseObjectChildren().begin()) {
866 return nullptr;
867 } else {
868 return *(objIterator - 1);
869 }
870}
871
872
873void
875 // check if previous plan object was defined but not the from
876 const auto previousPlanObj = getPreviousPlanObj(sumoBaseObject);
877 if (previousPlanObj) {
878 // ge previous plan parameters
879 const auto previousPlanParameters = previousPlanObj->getPlanParameters();
880 if (!previousPlanParameters.toEdge.empty()) {
881 // edge (to)
882 resetPreviousFromAttributes(previousPlanObj, "edge", previousPlanParameters.toEdge);
883 fromEdge = previousPlanParameters.toEdge;
884 } else if (!previousPlanParameters.consecutiveEdges.empty()) {
885 // consecutive edge
886 resetPreviousFromAttributes(previousPlanObj, "consecutive edge", previousPlanParameters.consecutiveEdges.back());
887 fromEdge = previousPlanParameters.consecutiveEdges.back();
888 } else if (!previousPlanParameters.toRoute.empty()) {
889 // route
890 resetPreviousFromAttributes(previousPlanObj, "route edge", previousPlanParameters.toRoute);
891 fromRoute = previousPlanParameters.toRoute;
892 } else if (!previousPlanParameters.toJunction.empty()) {
893 // junction
894 resetPreviousFromAttributes(previousPlanObj, "junction", previousPlanParameters.toJunction);
895 fromJunction = previousPlanParameters.toJunction;
896 } else if (!previousPlanParameters.toTAZ.empty()) {
897 // TAZ
898 resetPreviousFromAttributes(previousPlanObj, "TAZ", previousPlanParameters.toTAZ);
899 fromTAZ = previousPlanParameters.toTAZ;
900 } else if (!previousPlanParameters.toBusStop.empty()) {
901 // busStop
902 resetPreviousFromAttributes(previousPlanObj, "bus stop", previousPlanParameters.toBusStop);
903 fromBusStop = previousPlanParameters.toBusStop;
904 } else if (!previousPlanParameters.toTrainStop.empty()) {
905 // trainStop
906 resetPreviousFromAttributes(previousPlanObj, "train stop", previousPlanParameters.toTrainStop);
907 fromTrainStop = previousPlanParameters.toTrainStop;
908 } else if (!previousPlanParameters.toContainerStop.empty()) {
909 // containerStop
910 resetPreviousFromAttributes(previousPlanObj, "container stop", previousPlanParameters.toContainerStop);
911 fromContainerStop = previousPlanParameters.toContainerStop;
912 } else if (!previousPlanParameters.toChargingStation.empty()) {
913 // chargingStation
914 resetPreviousFromAttributes(previousPlanObj, "charging station", previousPlanParameters.toChargingStation);
915 fromChargingStation = previousPlanParameters.toChargingStation;
916 } else if (!previousPlanParameters.toParkingArea.empty()) {
917 // parkingArea
918 resetPreviousFromAttributes(previousPlanObj, "parking area", previousPlanParameters.toParkingArea);
919 fromParkingArea = previousPlanParameters.toParkingArea;
920 }
921 }
922}
923
924
925void
927 const std::string& newType, const std::string& newId) const {
928 if (!fromEdge.empty()) {
929 writeIgnoringMessage(previousPlanObj, "edge", fromEdge, newType, newId);
930 }
931 if (!fromJunction.empty()) {
932 writeIgnoringMessage(previousPlanObj, "junction", fromJunction, newType, newId);
933 }
934 if (!fromTAZ.empty()) {
935 writeIgnoringMessage(previousPlanObj, "TAZ", fromTAZ, newType, newId);
936 }
937 if (!fromBusStop.empty()) {
938 writeIgnoringMessage(previousPlanObj, "bus stop", fromBusStop, newType, newId);
939 }
940 if (!fromTrainStop.empty()) {
941 writeIgnoringMessage(previousPlanObj, "train stop", fromTrainStop, newType, newId);
942 }
943 if (!fromContainerStop.empty()) {
944 writeIgnoringMessage(previousPlanObj, "container stop", fromContainerStop, newType, newId);
945 }
946 if (!fromChargingStation.empty()) {
947 writeIgnoringMessage(previousPlanObj, "charging station", fromChargingStation, newType, newId);
948 }
949 if (!fromParkingArea.empty()) {
950 writeIgnoringMessage(previousPlanObj, "parking area", fromParkingArea, newType, newId);
951 }
952}
953
954
955void
957 const std::string& oldType, const std::string& oldId, const std::string& newType, const std::string& newId) const {
958 WRITE_WARNING(TLF("Ignoring from % '%' used in % '%' and using instead the previous end element % '%'",
959 oldType, oldId,
960 toString(previousPlanObj->getParentSumoBaseObject()->getTag()),
962 newType, newId));
963}
964
965// ---------------------------------------------------------------------------
966// CommonXMLStructure::SumoBaseObject - methods
967// ---------------------------------------------------------------------------
968
970 mySumoBaseObjectParent(parent),
971 myVehicleTypeParameter("") {
972 // add this SumoBaseObject into parent children
975 }
976}
977
978
980 // remove this SumoBaseObject from parent children
981 if (mySumoBaseObjectParent) {
982 mySumoBaseObjectParent->removeSumoBaseObjectChild(this);
983 }
984 // delete all SumoBaseObjectChildrens
985 while (mySumoBaseObjectChildren.size() > 0) {
986 delete mySumoBaseObjectChildren.back();
987 }
988}
989
990
991void
993 // reset tag
994 myTag = SUMO_TAG_NOTHING;
995 // reset vClass
996 myVClass = SVC_IGNORING;
997 // clear containers
998 myStringAttributes.clear();
999 myIntAttributes.clear();
1000 myDoubleAttributes.clear();
1001 myBoolAttributes.clear();
1002 myPositionAttributes.clear();
1003 myTimeAttributes.clear();
1004 myColorAttributes.clear();
1005 myStringListAttributes.clear();
1006 myDoubleListAttributes.clear();
1007 myPositionVectorAttributes.clear();
1008 myParentIDs.clear();
1009 myParameters.clear();
1010 mySumoBaseObjectChildren.clear();
1011 // reset flags
1012 myDefinedVehicleTypeParameter = false;
1013 myDefinedVehicleParameter = false;
1014 myDefinedStopParameter = false;
1015 // delete all SumoBaseObjectChildrens
1016 while (mySumoBaseObjectChildren.size() > 0) {
1017 delete mySumoBaseObjectChildren.back();
1018 }
1019}
1020
1021
1022void
1024 myTag = tag;
1025}
1026
1027
1028void
1030 myWasCreated = true;
1031}
1032
1033
1036 return myTag;
1037}
1038
1039
1040bool
1042 return myWasCreated;
1043}
1044
1045
1048 return mySumoBaseObjectParent;
1049}
1050
1051
1052std::map<std::string, std::string>
1054 std::map<std::string, std::string> result;
1055 for (const auto& attr : myStringAttributes) {
1056 result[toString(attr.first)] = attr.second;
1057 }
1058 for (const auto& attr : myIntAttributes) {
1059 result[toString(attr.first)] = toString(attr.second);
1060 }
1061 for (const auto& attr : myDoubleAttributes) {
1062 result[toString(attr.first)] = toString(attr.second);
1063 }
1064 for (const auto& attr : myBoolAttributes) {
1065 result[toString(attr.first)] = toString(attr.second);
1066 }
1067 for (const auto& attr : myPositionAttributes) {
1068 result[toString(attr.first)] = toString(attr.second);
1069 }
1070 for (const auto& attr : myTimeAttributes) {
1071 result[toString(attr.first)] = time2string(attr.second);
1072 }
1073 for (const auto& attr : myColorAttributes) {
1074 result[toString(attr.first)] = toString(attr.second);
1075 }
1076 for (const auto& attr : myStringListAttributes) {
1077 result[toString(attr.first)] = toString(attr.second);
1078 }
1079 for (const auto& attr : myDoubleListAttributes) {
1080 result[toString(attr.first)] = toString(attr.second);
1081 }
1082 for (const auto& attr : myPositionVectorAttributes) {
1083 result[toString(attr.first)] = toString(attr.second);
1084 }
1085 return result;
1086}
1087
1088
1089const std::string&
1091 if (hasStringAttribute(attr)) {
1092 return myStringAttributes.at(attr);
1093 } else {
1094 handleAttributeError(attr, "string");
1095 throw ProcessError();
1096 }
1097}
1098
1099
1100int
1102 if (hasIntAttribute(attr)) {
1103 return myIntAttributes.at(attr);
1104 } else {
1105 handleAttributeError(attr, "int");
1106 throw ProcessError();
1107 }
1108}
1109
1110
1111double
1113 if (hasDoubleAttribute(attr)) {
1114 return myDoubleAttributes.at(attr);
1115 } else {
1116 handleAttributeError(attr, "double");
1117 throw ProcessError();
1118 }
1119}
1120
1121
1122bool
1124 if (hasBoolAttribute(attr)) {
1125 return myBoolAttributes.at(attr);
1126 } else {
1127 handleAttributeError(attr, "bool");
1128 throw ProcessError();
1129 }
1130}
1131
1132
1133const Position&
1135 if (hasPositionAttribute(attr)) {
1136 return myPositionAttributes.at(attr);
1137 } else {
1138 handleAttributeError(attr, "position");
1139 throw ProcessError();
1140 }
1141}
1142
1143
1146 if (hasTimeAttribute(attr)) {
1147 return myTimeAttributes.at(attr);
1148 } else {
1149 handleAttributeError(attr, "time");
1150 throw ProcessError();
1151 }
1152}
1153
1154
1158 if (hasTimeAttribute(attr)) {
1159 return myTimeAttributes.at(attr);
1160 } else {
1161 // try 'freq' as alias for 'period'
1162 attr = SUMO_ATTR_FREQUENCY;
1163 if (hasTimeAttribute(attr)) {
1164 return myTimeAttributes.at(attr);
1165 }
1166 handleAttributeError(SUMO_ATTR_PERIOD, "time");
1167 throw ProcessError();
1168 }
1169}
1170
1171
1172const RGBColor&
1174 if (hasColorAttribute(attr)) {
1175 return myColorAttributes.at(attr);
1176 } else {
1177 handleAttributeError(attr, "color");
1178 throw ProcessError();
1179 }
1180}
1181
1182
1183const std::vector<std::string>&
1185 if (hasStringListAttribute(attr)) {
1186 return myStringListAttributes.at(attr);
1187 } else {
1188 handleAttributeError(attr, "string list");
1189 throw ProcessError();
1190 }
1191}
1192
1193
1194const std::vector<double>&
1196 if (hasDoubleListAttribute(attr)) {
1197 return myDoubleListAttributes.at(attr);
1198 } else {
1199 handleAttributeError(attr, "double list");
1200 throw ProcessError();
1201 }
1202}
1203
1204
1205const PositionVector&
1207 if (hasPositionVectorAttribute(attr)) {
1208 return myPositionVectorAttributes.at(attr);
1209 } else {
1210 handleAttributeError(attr, "position vector");
1211 throw ProcessError();
1212 }
1213}
1214
1215const std::string&
1217 if (hasParentID(tag)) {
1218 return myParentIDs.at(tag);
1219 } else {
1220 WRITE_ERRORF(TL("Trying to get undefined parent '%' in SUMOBaseObject '%'"), toString(tag), toString(myTag));
1221 throw ProcessError();
1222 }
1223}
1224
1225
1228 return myVClass;
1229}
1230
1231
1232const SUMOVTypeParameter&
1234 if (myDefinedVehicleTypeParameter) {
1235 return myVehicleTypeParameter;
1236 } else {
1237 throw ProcessError(TL("Undefined vehicleType parameter"));
1238 }
1239}
1240
1241
1244 if (myDefinedVehicleParameter) {
1245 return myVehicleParameter;
1246 } else {
1247 throw ProcessError(TL("Undefined vehicle parameter"));
1248 }
1249}
1250
1251
1254 if (myDefinedStopParameter) {
1255 return myStopParameter;
1256 } else {
1257 throw ProcessError(TL("Undefined stop parameter"));
1258 }
1259
1260}
1261
1262
1263const std::map<std::string, std::string>&
1265 return myParameters;
1266}
1267
1268
1271 return myPlanParameters;
1272}
1273
1274
1275const std::vector<CommonXMLStructure::SumoBaseObject*>&
1277 return mySumoBaseObjectChildren;
1278}
1279
1280
1281bool
1283 return myStringAttributes.count(attr) > 0;
1284}
1285
1286
1287bool
1289 return myIntAttributes.count(attr) > 0;
1290}
1291
1292
1293bool
1295 return myDoubleAttributes.count(attr) > 0;
1296}
1297
1298
1299bool
1301 return myBoolAttributes.count(attr) > 0;
1302}
1303
1304
1305bool
1307 return myPositionAttributes.count(attr) > 0;
1308}
1309
1310
1311bool
1313 return myTimeAttributes.count(attr) > 0;
1314}
1315
1316
1317bool
1319 return myColorAttributes.count(attr) > 0;
1320}
1321
1322
1323bool
1325 return myStringListAttributes.count(attr) > 0;
1326}
1327
1328
1329bool
1331 return myDoubleListAttributes.count(attr) > 0;
1332}
1333
1334
1335bool
1337 return myPositionVectorAttributes.count(attr) > 0;
1338}
1339
1340
1341bool
1343 return myParentIDs.count(tag) > 0;
1344}
1345
1346
1347void
1349 myStringAttributes[attr] = value;
1350}
1351
1352
1353void
1355 myIntAttributes[attr] = value;
1356}
1357
1358
1359void
1361 myDoubleAttributes[attr] = value;
1362}
1363
1364
1365void
1367 myBoolAttributes[attr] = value;
1368}
1369
1370
1371void
1373 myPositionAttributes[attr] = value;
1374}
1375
1376
1377void
1379 myTimeAttributes[attr] = value;
1380}
1381
1382
1383void
1385 myColorAttributes[attr] = value;
1386}
1387
1388
1389void
1390CommonXMLStructure::SumoBaseObject::addStringListAttribute(const SumoXMLAttr attr, const std::vector<std::string>& value) {
1391 myStringListAttributes[attr] = value;
1392}
1393
1394
1395void
1397 myDoubleListAttributes[attr] = value;
1398}
1399
1400
1401void
1403 myPositionVectorAttributes[attr] = value;
1404}
1405
1406
1407void
1409 myParentIDs[tag] = ID;
1410}
1411
1412
1413void
1415 const auto parameters = StringTokenizer(value, '|').getVector();
1416 for (const auto& parameter : parameters) {
1417 const auto keyValue = StringTokenizer(parameter, '=').getVector();
1418 addParameter(keyValue[0], keyValue[1]);
1419 }
1420}
1421
1422
1423void
1424CommonXMLStructure::SumoBaseObject::addParameter(const std::string& key, const std::string& value) {
1425 // check if we have to insert in vType, vehicle or stop parameters
1426 if (myDefinedVehicleTypeParameter) {
1427 myVehicleTypeParameter.setParameter(key, value);
1428 } else if (myDefinedVehicleParameter) {
1429 myVehicleParameter.setParameter(key, value);
1430 } else if (myDefinedStopParameter) {
1431 myStopParameter.setParameter(key, value);
1432 } else {
1433 myParameters[key] = value;
1434 }
1435}
1436
1437
1438void
1442
1443
1444void
1446 myVehicleTypeParameter = *vehicleTypeParameter;
1447 myDefinedVehicleTypeParameter = true;
1448 // set attribute id
1449 addStringAttribute(SUMO_ATTR_ID, myVehicleTypeParameter.id);
1450}
1451
1452
1453void
1455 myVehicleParameter = *vehicleParameter;
1456 myDefinedVehicleParameter = true;
1457 // set attribute id
1458 if (!myVehicleParameter.id.empty()) {
1459 addStringAttribute(SUMO_ATTR_ID, myVehicleParameter.id);
1460 }
1461 // set attribute route
1462 if (!vehicleParameter->routeid.empty()) {
1463 addStringAttribute(SUMO_ATTR_ROUTE, myVehicleParameter.routeid);
1464 }
1465}
1466
1467
1468void
1470 myStopParameter = stopParameter;
1471 myDefinedStopParameter = true;
1472 // set attribute edge
1473 if (!myStopParameter.edge.empty()) {
1474 addStringAttribute(SUMO_ATTR_EDGE, myStopParameter.edge);
1475 }
1476 // set attribute lane
1477 if (!myStopParameter.lane.empty()) {
1478 addStringAttribute(SUMO_ATTR_LANE, myStopParameter.lane);
1479 }
1480 // set attribute busStop
1481 if (!myStopParameter.busstop.empty()) {
1482 addStringAttribute(SUMO_ATTR_BUS_STOP, myStopParameter.busstop);
1483 }
1484 // set attribute containerstop
1485 if (!myStopParameter.containerstop.empty()) {
1486 addStringAttribute(SUMO_ATTR_CONTAINER_STOP, myStopParameter.containerstop);
1487 }
1488 // set attribute parkingarea
1489 if (!myStopParameter.parkingarea.empty()) {
1490 addStringAttribute(SUMO_ATTR_PARKING_AREA, myStopParameter.parkingarea);
1491 }
1492 // set attribute chargingStation
1493 if (!myStopParameter.chargingStation.empty()) {
1494 addStringAttribute(SUMO_ATTR_CHARGING_STATION, myStopParameter.chargingStation);
1495 }
1496}
1497
1498
1499void
1501 myPlanParameters = planParameters;
1502}
1503
1504void
1506 // just add it into mySumoBaseObjectChildren
1507 mySumoBaseObjectChildren.push_back(sumoBaseObject);
1508}
1509
1510
1511void
1513 // find sumoBaseObject
1514 auto it = std::find(mySumoBaseObjectChildren.begin(), mySumoBaseObjectChildren.end(), sumoBaseObject);
1515 // check iterator
1516 if (it != mySumoBaseObjectChildren.end()) {
1517 mySumoBaseObjectChildren.erase(it);
1518 }
1519}
1520
1521
1522void
1524 WRITE_ERRORF(TL("Trying to get undefined % attribute '%' in SUMOBaseObject '%'"), type, toString(attr), toString(myTag));
1525}
1526
1527// ---------------------------------------------------------------------------
1528// CommonXMLStructure - methods
1529// ---------------------------------------------------------------------------
1530
1536
1537
1539 // delete mySumoBaseObjectRoot (this will also delete all SumoBaseObjectChildrens)
1541 delete mySumoBaseObjectRoot;
1542 }
1543}
1544
1545
1546void
1548 // first check if root is empty
1549 if (mySumoBaseObjectRoot == nullptr) {
1550 // create root
1551 mySumoBaseObjectRoot = new SumoBaseObject(nullptr);
1552 // set tag
1554 // update last inserted Root
1556 } else {
1557 // create new node
1558 SumoBaseObject* newSumoBaseObject = new SumoBaseObject(myCurrentSumoBaseObject);
1559 // update last inserted node
1560 myCurrentSumoBaseObject = newSumoBaseObject;
1561 }
1562}
1563
1564
1565void
1567 // check that myCurrentSumoBaseObject is valid
1569 // check if last inserted SumoBaseObject is the root
1571 // reset both pointers
1572 myCurrentSumoBaseObject = nullptr;
1573 mySumoBaseObjectRoot = nullptr;
1574 } else {
1575 // update last inserted SumoBaseObject
1577 }
1578 }
1579}
1580
1581
1582void
1584 // delete current sumo base object and use their parent as sumo base object
1588 myCurrentSumoBaseObject = nullptr;
1589 mySumoBaseObjectRoot = nullptr;
1590 } else {
1591 auto parentSumoBaseObject = myCurrentSumoBaseObject->getParentSumoBaseObject();
1593 myCurrentSumoBaseObject = parentSumoBaseObject;
1594 }
1595 }
1596}
1597
1598
1603
1604
1609
1610/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
#define WRITE_ERRORF(...)
Definition MsgHandler.h:296
#define WRITE_WARNING(msg)
Definition MsgHandler.h:286
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition SUMOTime.cpp:91
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_RIDE_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_BUSSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_WALK_BUSSTOP_BUSSTOP
@ GNE_TAG_PERSONTRIP_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_EDGE_TAZ
@ GNE_TAG_WALK_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_JUNCTION
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_TAZ
@ GNE_TAG_RIDE_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_RIDE_BUSSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_TAZ_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_PERSONTRIP_EDGE_JUNCTION
@ GNE_TAG_TRANSHIP_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_RIDE_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_TRAINSTOP_EDGE
@ GNE_TAG_WALK_TAZ_BUSSTOP
@ GNE_TAG_PERSONTRIP_EDGE_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TRAINSTOP_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_TRAINSTOP
@ GNE_TAG_STOPCONTAINER_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TRAINSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TAZ_CHARGINGSTATION
@ GNE_TAG_RIDE_CONTAINERSTOP_EDGE
@ GNE_TAG_WALK_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_BUSSTOP_EDGE
@ GNE_TAG_WALK_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_PARKINGAREA_TRAINSTOP
@ GNE_TAG_WALK_PARKINGAREA_PARKINGAREA
@ GNE_TAG_TRANSPORT_EDGE_TRAINSTOP
@ GNE_TAG_WALK_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSHIP_EDGE_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_TAZ_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_TAZ_CONTAINERSTOP
@ GNE_TAG_WALK_PARKINGAREA_JUNCTION
@ GNE_TAG_WALK_CONTAINERSTOP_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_PARKINGAREA
@ GNE_TAG_TRANSHIP_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_EDGE_PARKINGAREA
@ GNE_TAG_TRANSPORT_EDGE_BUSSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_PARKINGAREA
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ GNE_TAG_WALK_PARKINGAREA_EDGE
@ GNE_TAG_TRANSHIP_EDGE_EDGE
@ GNE_TAG_WALK_EDGES
@ GNE_TAG_RIDE_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_RIDE_CHARGINGSTATION_EDGE
@ GNE_TAG_RIDE_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_WALK_BUSSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_TRAINSTOP
@ SUMO_TAG_ROOTFILE
root file
@ GNE_TAG_TRANSHIP_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_JUNCTION
@ GNE_TAG_TRANSPORT_PARKINGAREA_PARKINGAREA
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_TRAINSTOP
@ GNE_TAG_WALK_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_TAZ
@ GNE_TAG_STOPCONTAINER_EDGE
@ GNE_TAG_WALK_TRAINSTOP_TAZ
@ GNE_TAG_PERSONTRIP_PARKINGAREA_JUNCTION
@ GNE_TAG_STOPCONTAINER_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_STOPPERSON_BUSSTOP
@ GNE_TAG_TRANSPORT_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_BUSSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_TAZ
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_JUNCTION_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_TRANSPORT_PARKINGAREA_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_TAZ
@ GNE_TAG_TRANSHIP_PARKINGAREA_TRAINSTOP
@ GNE_TAG_WALK_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_TAZ_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_WALK_JUNCTION_PARKINGAREA
@ GNE_TAG_RIDE_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_JUNCTION_TRAINSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_TAZ
@ GNE_TAG_PERSONTRIP_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_EDGE
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_BUSSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_EDGES
@ GNE_TAG_WALK_JUNCTION_CONTAINERSTOP
@ GNE_TAG_STOPCONTAINER_CONTAINERSTOP
@ GNE_TAG_RIDE_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_TRAINSTOP
@ GNE_TAG_RIDE_BUSSTOP_EDGE
@ GNE_TAG_RIDE_TRAINSTOP_BUSSTOP
@ GNE_TAG_WALK_TRAINSTOP_EDGE
@ GNE_TAG_RIDE_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_PARKINGAREA_EDGE
@ GNE_TAG_TRANSPORT_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_TRAINSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_EDGE_EDGE
@ GNE_TAG_WALK_EDGE_TRAINSTOP
@ GNE_TAG_WALK_TAZ_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_CONTAINERSTOP
@ GNE_TAG_STOPCONTAINER_BUSSTOP
@ GNE_TAG_WALK_JUNCTION_TAZ
@ GNE_TAG_WALK_JUNCTION_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_TAZ
@ GNE_TAG_PERSONTRIP_TAZ_BUSSTOP
@ GNE_TAG_RIDE_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_JUNCTION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_WALK_JUNCTION_JUNCTION
@ GNE_TAG_TRANSPORT_PARKINGAREA_TRAINSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_PARKINGAREA
@ GNE_TAG_WALK_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_WALK_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_TAZ
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_RIDE_EDGE_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_BUSSTOP
@ GNE_TAG_WALK_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_WALK_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_TRAINSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_TAZ
@ GNE_TAG_WALK_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_RIDE_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_RIDE_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_BUSSTOP_EDGE
@ GNE_TAG_TRANSPORT_TRAINSTOP_BUSSTOP
@ GNE_TAG_WALK_JUNCTION_TRAINSTOP
@ GNE_TAG_TRANSHIP_EDGE_TRAINSTOP
@ GNE_TAG_TRANSHIP_TRAINSTOP_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_PARKINGAREA
@ GNE_TAG_WALK_TRAINSTOP_PARKINGAREA
@ GNE_TAG_RIDE_EDGE_BUSSTOP
@ GNE_TAG_WALK_TAZ_JUNCTION
@ GNE_TAG_PERSONTRIP_JUNCTION_PARKINGAREA
@ GNE_TAG_TRANSPORT_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_PARKINGAREA
@ GNE_TAG_STOPPERSON_CONTAINERSTOP
@ GNE_TAG_WALK_BUSSTOP_TAZ
@ GNE_TAG_RIDE_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_JUNCTION_JUNCTION
@ GNE_TAG_WALK_TAZ_TAZ
@ GNE_TAG_WALK_TRAINSTOP_BUSSTOP
@ GNE_TAG_WALK_TAZ_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_JUNCTION
@ GNE_TAG_WALK_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_PARKINGAREA_BUSSTOP
@ GNE_TAG_RIDE_EDGE_TRAINSTOP
@ GNE_TAG_WALK_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_JUNCTION_BUSSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_JUNCTION
@ GNE_TAG_WALK_JUNCTION_EDGE
@ GNE_TAG_PERSONTRIP_BUSSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_BUSSTOP
@ GNE_TAG_RIDE_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_TRAINSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_STOPPERSON_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_BUSSTOP_EDGE
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_TAZ
@ GNE_TAG_PERSONTRIP_JUNCTION_EDGE
@ GNE_TAG_RIDE_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_RIDE_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_STOPPERSON_TRAINSTOP
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_EDGE_BUSSTOP
@ GNE_TAG_RIDE_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_EDGE_JUNCTION
@ GNE_TAG_RIDE_PARKINGAREA_EDGE
@ GNE_TAG_PERSONTRIP_JUNCTION_TAZ
@ GNE_TAG_TRANSHIP_PARKINGAREA_EDGE
@ GNE_TAG_TRANSPORT_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_JUNCTION_CONTAINERSTOP
@ GNE_TAG_WALK_TRAINSTOP_TRAINSTOP
@ GNE_TAG_WALK_CHARGINGSTATION_EDGE
@ GNE_TAG_TRANSHIP_EDGE_PARKINGAREA
@ GNE_TAG_WALK_EDGE_BUSSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_PARKINGAREA
@ GNE_TAG_TRANSHIP_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_BUSSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_RIDE_EDGE_PARKINGAREA
@ GNE_TAG_RIDE_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_TAZ_TRAINSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_TRAINSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_RIDE_TRAINSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_BUSSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_BUSSTOP
@ GNE_TAG_STOPCONTAINER_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_TAZ_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TRAINSTOP_JUNCTION
@ GNE_TAG_RIDE_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_STOPPERSON_EDGE
@ GNE_TAG_PERSONTRIP_JUNCTION_CHARGINGSTATION
@ GNE_TAG_RIDE_PARKINGAREA_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_ROUTE
@ GNE_TAG_PERSONTRIP_EDGE_TAZ
@ GNE_TAG_WALK_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_RIDE_TRAINSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_EDGE
@ GNE_TAG_WALK_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_RIDE_EDGE_CONTAINERSTOP
@ GNE_TAG_STOPPERSON_PARKINGAREA
@ GNE_TAG_RIDE_TRAINSTOP_EDGE
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ GNE_ATTR_FROM_TRAINSTOP
@ SUMO_ATTR_LANE
@ GNE_ATTR_FROM_BUSSTOP
@ SUMO_ATTR_FROM_JUNCTION
@ SUMO_ATTR_CONTAINER_STOP
@ SUMO_ATTR_PARKING_AREA
@ SUMO_ATTR_EDGE
@ SUMO_ATTR_BUS_STOP
@ SUMO_ATTR_TRAIN_STOP
@ SUMO_ATTR_TO_JUNCTION
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_CHARGING_STATION
@ GNE_ATTR_FROM_PARKINGAREA
@ GNE_ATTR_FROM_CONTAINERSTOP
@ SUMO_ATTR_PERIOD
@ SUMO_ATTR_TO_TAZ
@ SUMO_ATTR_FREQUENCY
@ SUMO_ATTR_TO
@ SUMO_ATTR_FROM
@ SUMO_ATTR_FROM_TAZ
@ GNE_ATTR_FROM_ROUTE
@ GNE_ATTR_FROM_CHARGINGSTATION
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_ID
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
plan parameters (used for group all from-to parameters related with plans)
SumoXMLTag getPersonStopTag() const
get the person stop tag for the current combination of parameters
SumoXMLTag getRideTag() const
get the ride tag for the current combination of parameters
void writeIgnoringMessage(const CommonXMLStructure::SumoBaseObject *previousPlanObj, const std::string &oldType, const std::string &oldId, const std::string &newType, const std::string &newId) const
write ignoring message
int getNumberOfDefinedParameters() const
get number of defined plans
SumoXMLTag getPersonTripTag() const
get the personTrip tag for the current combination of parameters
SumoXMLTag getTransportTag() const
get the transport tag for the current combination of parameters
const CommonXMLStructure::SumoBaseObject * getPreviousPlanObj(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get previous plan obj
bool isSingleEdgePlan() const
check if this is a single-edge plan
void updateFromAttributes(const CommonXMLStructure::SumoBaseObject *sumoBaseObject)
update the from attributes
SumoXMLTag getContainerStopTag() const
get the container stop tag for the current combination of parameters
SumoXMLTag getWalkTag() const
get the walk tag for the current combination of parameters
SumoXMLTag getTranshipTag() const
get the tranship tag for the current combination of parameters
void resetPreviousFromAttributes(const CommonXMLStructure::SumoBaseObject *previousPlanObj, const std::string &newType, const std::string &newId) const
reste all previous from attributes
void addDoubleListAttribute(const SumoXMLAttr attr, const std::vector< double > &value)
add double list attribute into current SumoBaseObject node
const std::vector< double > & getDoubleListAttribute(const SumoXMLAttr attr) const
get double list attribute
void addIntAttribute(const SumoXMLAttr attr, const int value)
add int attribute into current SumoBaseObject node
void setVehicleTypeParameter(const SUMOVTypeParameter *vehicleTypeParameter)
set vehicle type parameters
void addSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
add SumoBaseObject child
const SUMOVehicleParameter::Stop & getStopParameter() const
get stop parameters
const RGBColor & getColorAttribute(const SumoXMLAttr attr) const
get color attribute
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
const PositionVector & getPositionVectorAttribute(const SumoXMLAttr attr) const
get PositionVector attribute
SumoBaseObject(SumoBaseObject *sumoBaseObjectParent)
constructor
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
bool hasParentID(const SumoXMLTag tag) const
check if current SumoBaseObject has the given parent ID
void removeSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
remove SumoBaseObject child
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
std::map< std::string, std::string > getAllAttributes() const
get all attributes in string format
bool hasPositionAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
SumoBaseObject * getParentSumoBaseObject() const
get pointer to mySumoBaseObjectParent SumoBaseObject (if is null, then is the root)
const Position & getPositionAttribute(const SumoXMLAttr attr) const
get Position attribute
const CommonXMLStructure::PlanParameters & getPlanParameters() const
get plan parameteres
void addPositionVectorAttribute(const SumoXMLAttr attr, const PositionVector &value)
add PositionVector attribute into current SumoBaseObject node
const std::map< std::string, std::string > & getParameters() const
get parameters
SUMOVehicleClass getVClass() const
vehicle class
SumoBaseObject * mySumoBaseObjectParent
pointer to SumoBaseObject parent (If is null, then is the root)
bool hasPositionVectorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given positionVector attribute
bool hasTimeAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given time attribute
void addBoolAttribute(const SumoXMLAttr attr, const bool value)
add bool attribute into current SumoBaseObject node
void setPlanParameters(const CommonXMLStructure::PlanParameters &planParameters)
set plan parmeter
const SUMOVTypeParameter & getVehicleTypeParameter() const
get current vType
SumoXMLTag getTag() const
get XML myTag
const std::string & getParentID(const SumoXMLTag tag) const
get parent ID
void addParameter(const std::string &key, const std::string &value)
add parameter into current SumoBaseObject node
void addParentID(const SumoXMLTag tag, const std::string &ID)
add parent (string) attribute into current SumoBaseObject node
bool hasColorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given color attribute
void markAsCreated()
mark as successfully created
void addTimeAttribute(const SumoXMLAttr attr, const SUMOTime value)
add time attribute into current SumoBaseObject node
void addStringListAttribute(const SumoXMLAttr attr, const std::vector< std::string > &value)
add string list attribute into current SumoBaseObject node
bool hasIntAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given int attribute
int getIntAttribute(const SumoXMLAttr attr) const
get int attribute
void addDoubleAttribute(const SumoXMLAttr attr, const double value)
add double attribute into current SumoBaseObject node
void handleAttributeError(const SumoXMLAttr attr, const std::string &type) const
handle attribute error
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
void addPositionAttribute(const SumoXMLAttr attr, const Position &value)
add Position attribute into current SumoBaseObject node
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void setVClass(SUMOVehicleClass vClass)
set vehicle class
bool wasCreated() const
check if the object was successfully created in build<...> function
SUMOTime getPeriodAttribute() const
get 'period' attribute
void setVehicleParameter(const SUMOVehicleParameter *vehicleParameter)
set vehicle parameters
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
add string attribute into current SumoBaseObject node
void setStopParameter(const SUMOVehicleParameter::Stop &stopParameter)
add stop parameters
double getDoubleAttribute(const SumoXMLAttr attr) const
get double attribute
const SUMOVehicleParameter & getVehicleParameter() const
get vehicle parameters
bool hasDoubleListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double list attribute
const std::vector< std::string > & getStringListAttribute(const SumoXMLAttr attr) const
get string list attribute
bool hasStringListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given string list attribute
void addColorAttribute(const SumoXMLAttr attr, const RGBColor &value)
add color attribute into current SumoBaseObject node
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
void addParameters(const std::string &value)
add parameters into current SumoBaseObject node (format: key=value1|key2=value2|.....
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
void abortSUMOBaseOBject()
abort SUMOBaseOBject
CommonXMLStructure::SumoBaseObject * getSumoBaseObjectRoot() const
get SumoBaseObject root
CommonXMLStructure::SumoBaseObject * getCurrentSumoBaseObject() const
get current editedSumoBaseObject
void openSUMOBaseOBject()
open SUMOBaseOBject
CommonXMLStructure::SumoBaseObject * mySumoBaseObjectRoot
SumoBaseObject root.
CommonXMLStructure::SumoBaseObject * myCurrentSumoBaseObject
last inserted SumoBaseObject
void closeSUMOBaseOBject()
close SUMOBaseOBject
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
A list of positions.
Encapsulated SAX-Attributes.
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue=T(), bool report=true) const
Tries to read given attribute assuming it is an int.
Structure representing possible vehicle parameter.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
std::string routeid
The vehicle's route id.
std::vector< std::string > getVector()
return vector of strings