Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2002-2026 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 : /****************************************************************************/
14 : /// @file SUMORouteLoader.cpp
15 : /// @author Daniel Krajzewicz
16 : /// @author Michael Behrisch
17 : /// @date Wed, 6 Nov 2002
18 : ///
19 : // A class that performs the loading of routes
20 : /****************************************************************************/
21 : #include <config.h>
22 :
23 : #include <utils/xml/SUMOSAXReader.h>
24 : #include <utils/xml/XMLSubSys.h>
25 : #include <utils/common/Translation.h>
26 : #include "SUMORouteHandler.h"
27 : #include "SUMORouteLoader.h"
28 :
29 :
30 : // ===========================================================================
31 : // method definitions
32 : // ===========================================================================
33 38297 : SUMORouteLoader::SUMORouteLoader(SUMORouteHandler* handler)
34 38297 : : myParser(nullptr), myMoreAvailable(true), myHandler(handler) {
35 38297 : myParser = XMLSubSys::getSAXReader(*myHandler, false, true);
36 114891 : if (!myParser->parseFirst(myHandler->getFileName())) {
37 0 : throw ProcessError(TLF("Can not read XML-file '%'.", myHandler->getFileName()));
38 : }
39 38297 : }
40 :
41 :
42 37852 : SUMORouteLoader::~SUMORouteLoader() {
43 37852 : delete myParser;
44 37852 : delete myHandler;
45 37852 : }
46 :
47 :
48 : SUMOTime
49 53069 : SUMORouteLoader::loadUntil(SUMOTime time) {
50 : // read only when further data is available, no error occurred
51 : // and vehicles may be found in the between the departure time of
52 : // the last read vehicle and the time to read until
53 53069 : if (!myMoreAvailable) {
54 : return SUMOTime_MAX;
55 : }
56 : // read vehicles until specified time or the period to read vehicles
57 : // until is reached
58 3251540 : while (myHandler->getLastDepart() <= time) {
59 3235561 : if (!myParser->parseNext()) {
60 : // no data available anymore
61 35941 : myMoreAvailable = false;
62 35941 : return SUMOTime_MAX;
63 : }
64 : }
65 15979 : return myHandler->getLastDepart();
66 : }
67 :
68 :
69 : bool
70 52088 : SUMORouteLoader::moreAvailable() const {
71 52088 : return myMoreAvailable;
72 : }
73 :
74 :
75 : SUMOTime
76 101583 : SUMORouteLoader::getFirstDepart() const {
77 101583 : return myHandler->getFirstDepart();
78 : }
79 :
80 :
81 : /****************************************************************************/
|