SUMO - Simulation of Urban MObility

MSXMLRawOut.cpp

Go to the documentation of this file.
00001 /****************************************************************************/
00011 // Realises dumping the complete network state
00012 /****************************************************************************/
00013 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00014 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors
00015 /****************************************************************************/
00016 //
00017 //   This file is part of SUMO.
00018 //   SUMO is free software: you can redistribute it and/or modify
00019 //   it under the terms of the GNU General Public License as published by
00020 //   the Free Software Foundation, either version 3 of the License, or
00021 //   (at your option) any later version.
00022 //
00023 /****************************************************************************/
00024 
00025 
00026 // ===========================================================================
00027 // included modules
00028 // ===========================================================================
00029 #ifdef _MSC_VER
00030 #include <windows_config.h>
00031 #else
00032 #include <config.h>
00033 #endif
00034 
00035 #include <cassert>
00036 #include <microsim/MSEdgeControl.h>
00037 #include <microsim/MSEdge.h>
00038 #include <microsim/MSLane.h>
00039 #include <microsim/MSGlobals.h>
00040 #include <utils/iodevices/OutputDevice.h>
00041 #include "MSXMLRawOut.h"
00042 
00043 #ifdef HAVE_MESOSIM
00044 #include <mesosim/MELoop.h>
00045 #include <mesosim/MESegment.h>
00046 #endif
00047 
00048 #ifdef CHECK_MEMORY_LEAKS
00049 #include <foreign/nvwa/debug_new.h>
00050 #endif // CHECK_MEMORY_LEAKS
00051 
00052 
00053 // ===========================================================================
00054 // method definitions
00055 // ===========================================================================
00056 void
00057 MSXMLRawOut::write(OutputDevice& of, const MSEdgeControl& ec,
00058                    SUMOTime timestep) {
00059     of.openTag("timestep") << " time=\"" << time2string(timestep) << "\">\n";
00060     const std::vector<MSEdge*> &edges = ec.getEdges();
00061     for (std::vector<MSEdge*>::const_iterator e = edges.begin(); e != edges.end(); ++e) {
00062         writeEdge(of, **e);
00063     }
00064     of.closeTag();
00065 }
00066 
00067 
00068 void
00069 MSXMLRawOut::writeEdge(OutputDevice& of, const MSEdge& edge) {
00070     //en
00071     bool dump = !MSGlobals::gOmitEmptyEdgesOnDump;
00072     if (!dump) {
00073 #ifdef HAVE_MESOSIM
00074         if (MSGlobals::gUseMesoSim) {
00075             MESegment* seg = MSGlobals::gMesoNet->getSegmentForEdge(edge);
00076             while (seg != 0) {
00077                 if (seg->getCarNumber() != 0) {
00078                     dump = true;
00079                     break;
00080                 }
00081                 seg = seg->getNextSegment();
00082             }
00083         } else {
00084 #endif
00085             const std::vector<MSLane*> &lanes = edge.getLanes();
00086             for (std::vector<MSLane*>::const_iterator lane = lanes.begin(); lane != lanes.end(); ++lane) {
00087                 if (((**lane).getVehicleNumber() != 0)) {
00088                     dump = true;
00089                     break;
00090                 }
00091             }
00092 #ifdef HAVE_MESOSIM
00093         }
00094 #endif
00095     }
00096     //en
00097     if (dump) {
00098         of.openTag("edge") << " id=\"" << edge.getID() << "\">\n";
00099 #ifdef HAVE_MESOSIM
00100         if (MSGlobals::gUseMesoSim) {
00101             MESegment* seg = MSGlobals::gMesoNet->getSegmentForEdge(edge);
00102             while (seg != 0) {
00103                 seg->writeVehicles(of);
00104                 seg = seg->getNextSegment();
00105             }
00106         } else {
00107 #endif
00108             const std::vector<MSLane*> &lanes = edge.getLanes();
00109             for (std::vector<MSLane*>::const_iterator lane = lanes.begin(); lane != lanes.end(); ++lane) {
00110                 writeLane(of, **lane);
00111             }
00112 #ifdef HAVE_MESOSIM
00113         }
00114 #endif
00115         of.closeTag();
00116     }
00117 }
00118 
00119 
00120 void
00121 MSXMLRawOut::writeLane(OutputDevice& of, const MSLane& lane) {
00122     of.openTag("lane") << " id=\"" << lane.myID << "\"";
00123     if (lane.getVehicleNumber() != 0) {
00124         of << ">\n";
00125         for (std::vector<MSVehicle*>::const_iterator veh = lane.myVehBuffer.begin();
00126                 veh != lane.myVehBuffer.end(); ++veh) {
00127             writeVehicle(of, **veh);
00128         }
00129         for (MSLane::VehCont::const_iterator veh = lane.myVehicles.begin();
00130                 veh != lane.myVehicles.end(); ++veh) {
00131             writeVehicle(of, **veh);
00132         }
00133     }
00134     of.closeTag(lane.getVehicleNumber() == 0);
00135 }
00136 
00137 
00138 void
00139 MSXMLRawOut::writeVehicle(OutputDevice& of, const MSBaseVehicle& veh) {
00140     if (veh.isOnRoad()) {
00141         of.openTag("vehicle") << " id=\"" << veh.getID() << "\" pos=\""
00142                               << veh.getPositionOnLane() << "\" speed=\"" << veh.getSpeed() << "\"";
00143         of.closeTag(true);
00144     }
00145 }
00146 
00147 
00148 
00149 /****************************************************************************/
00150 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines