#include <config.h>
#include <utils/foxtools/fxheader.h>
#include <utils/vehicle/SUMOVehicle.h>
#include <gui/GUIGlobals.h>
#include <microsim/MSRouteHandler.h>
#include "GUIMEVehicleControl.h"
#include "GUIMEVehicle.h"
GUIMEVehicleControl::GUIMEVehicleControl()
: MEVehicleControl() {}
GUIMEVehicleControl::~GUIMEVehicleControl() {
if (myLock.locked()) {
myLock.unlock();
}
}
SUMOVehicle*
GUIMEVehicleControl::buildVehicle(SUMOVehicleParameter* defs,
ConstMSRoutePtr route, MSVehicleType* type,
const bool ignoreStopErrors, const VehicleDefinitionSource source,
bool addRouteStops) {
MSBaseVehicle* built = new GUIMEVehicle(defs, route, type, type->computeChosenSpeedDeviation(source == VehicleDefinitionSource::ROUTEFILE ? MSRouteHandler::getParsingRNG() : nullptr));
initVehicle(built, ignoreStopErrors, addRouteStops, source);
return built;
}
bool
GUIMEVehicleControl::addVehicle(const std::string& id, SUMOVehicle* v) {
FXMutexLock locker(myLock);
return MEVehicleControl::addVehicle(id, v);
}
void
GUIMEVehicleControl::deleteVehicle(SUMOVehicle* veh, bool discard, bool wasKept) {
FXMutexLock locker(myLock);
MEVehicleControl::deleteVehicle(veh, discard, wasKept);
}
void
GUIMEVehicleControl::insertVehicleIDs(std::vector<GUIGlID>& into) {
FXMutexLock locker(myLock);
into.reserve(myVehicleDict.size());
for (VehicleDictType::iterator i = myVehicleDict.begin(); i != myVehicleDict.end(); ++i) {
SUMOVehicle* veh = (*i).second;
if (veh->isOnRoad()) {
into.push_back(static_cast<GUIMEVehicle*>((*i).second)->getGlID());
}
}
}
std::pair<double, double>
GUIMEVehicleControl::getVehicleMeanSpeeds() const {
FXMutexLock locker(myLock);
return MSVehicleControl::getVehicleMeanSpeeds();
}
int
GUIMEVehicleControl::getHaltingVehicleNo() const {
FXMutexLock locker(myLock);
return MSVehicleControl::getHaltingVehicleNo();
}
void
GUIMEVehicleControl::secureVehicles() {
myLock.lock();
}
void
GUIMEVehicleControl::releaseVehicles() {
myLock.unlock();
}