Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2002-2024 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 "SUMORouteHandler.h"
26 : #include "SUMORouteLoader.h"
27 :
28 :
29 : // ===========================================================================
30 : // method definitions
31 : // ===========================================================================
32 44622 : SUMORouteLoader::SUMORouteLoader(SUMORouteHandler* handler)
33 44622 : : myParser(nullptr), myMoreAvailable(true), myHandler(handler) {
34 44622 : myParser = XMLSubSys::getSAXReader(*myHandler, false, true);
35 133866 : if (!myParser->parseFirst(myHandler->getFileName())) {
36 0 : throw ProcessError(TLF("Can not read XML-file '%'.", myHandler->getFileName()));
37 : }
38 44622 : }
39 :
40 :
41 41695 : SUMORouteLoader::~SUMORouteLoader() {
42 41695 : delete myParser;
43 41695 : delete myHandler;
44 41695 : }
45 :
46 :
47 : SUMOTime
48 57037 : SUMORouteLoader::loadUntil(SUMOTime time) {
49 : // read only when further data is available, no error occurred
50 : // and vehicles may be found in the between the departure time of
51 : // the last read vehicle and the time to read until
52 57037 : if (!myMoreAvailable) {
53 : return SUMOTime_MAX;
54 : }
55 : // read vehicles until specified time or the period to read vehicles
56 : // until is reached
57 2942491 : while (myHandler->getLastDepart() <= time) {
58 2929080 : if (!myParser->parseNext()) {
59 : // no data available anymore
60 38484 : myMoreAvailable = false;
61 38484 : return SUMOTime_MAX;
62 : }
63 : }
64 13411 : return myHandler->getLastDepart();
65 : }
66 :
67 :
68 : bool
69 52047 : SUMORouteLoader::moreAvailable() const {
70 52047 : return myMoreAvailable;
71 : }
72 :
73 :
74 : SUMOTime
75 101155 : SUMORouteLoader::getFirstDepart() const {
76 101155 : return myHandler->getFirstDepart();
77 : }
78 :
79 :
80 : /****************************************************************************/
|