#include <config.h>
#include <microsim/MSNet.h>
#include <microsim/MSEdge.h>
#include <microsim/output/MSDetectorControl.h>
#include <microsim/output/MSMeanData.h>
#include <libsumo/TraCIConstants.h>
#include "Helper.h"
#include "MeanData.h"
namespace libsumo {
SubscriptionResults MeanData::mySubscriptionResults;
ContextSubscriptionResults MeanData::myContextSubscriptionResults;
std::vector<std::string>
MeanData::getIDList() {
std::vector<std::string> ids;
for (const auto& item : MSNet::getInstance()->getDetectorControl().getMeanData()) {
ids.push_back(item.first);
}
std::sort(ids.begin(), ids.end());
return ids;
}
int
MeanData::getIDCount() {
return (int)getIDList().size();
}
std::string
MeanData::getParameter(const std::string& , const std::string& ) {
return "";
}
LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(MeanData)
void
MeanData::setParameter(const std::string& , const std::string& , const std::string& ) {
}
LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(MeanData, MEANDATA)
MSMeanData*
MeanData::getMeanData(const std::string& id) {
auto mdMap = MSNet::getInstance()->getDetectorControl().getMeanData();
auto it = mdMap.find(id);
if (it == mdMap.end() || it->second.size() == 0) {
throw TraCIException("MeanData '" + id + "' is not known");
}
if (it->second.size() > 1) {
WRITE_WARNINGF(TL("Found % meanData definitions with id '%'."), toString(it->second.size()), id);
}
return it->second.front();
}
std::shared_ptr<VariableWrapper>
MeanData::makeWrapper() {
return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
}
bool
MeanData::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData) {
switch (variable) {
case TRACI_ID_LIST:
return wrapper->wrapStringList(objID, variable, getIDList());
case ID_COUNT:
return wrapper->wrapInt(objID, variable, getIDCount());
case libsumo::VAR_PARAMETER:
paramData->readUnsignedByte();
return wrapper->wrapString(objID, variable, getParameter(objID, paramData->readString()));
case libsumo::VAR_PARAMETER_WITH_KEY:
paramData->readUnsignedByte();
return wrapper->wrapStringPair(objID, variable, getParameterWithKey(objID, paramData->readString()));
default:
return false;
}
}
}