bool GNEAttributeCarrier::isValidStringVector(const std::string& value) { // 1) check if value is empty if(value.empty()) { return true; } // 2) Check if there are duplicated spaces for(int i = 1; i < (int)value.size(); i++) { if(value.at(i-1) == ' ' && value.at(i) == ' ') { return false; } } // 3) Check if the first and last character aren't spaces if((value.at(0) == ' ') || (value.at(value.size()-1) == ' ')) { return false; } // 4) Check if every sub-string is valid int index = 0; std::string subString; while(index < (int)value.size()) { if(value.at(index) == ' ') { if(!isValidFileValue(subString)) { return false; } else { subString.clear(); } } else { subString.push_back(value.at(index)); } index++; } // 5) All right, then return true return true; }
bool GNEVariableSpeedSignal::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: if (myViewNet->getNet()->getAdditional(getTag(), value) == NULL) { return true; } else { return false; } case SUMO_ATTR_POSITION: bool ok; return GeomConvHelper::parseShapeReporting(value, "user-supplied position", 0, ok, false).size() == 1; case SUMO_ATTR_LANES: { std::vector<std::string> laneIds; SUMOSAXAttributes::parseStringVector(value, laneIds); // Empty Lanes aren't valid if (laneIds.empty()) { return false; } // Iterate over parsed lanes for (int i = 0; i < (int)laneIds.size(); i++) { if (myViewNet->getNet()->retrieveLane(laneIds.at(i), false) == NULL) { return false; } } return true; } case SUMO_ATTR_FILE: return isValidFileValue(value); case GNE_ATTR_BLOCK_MOVEMENT: return canParse<bool>(value); default: throw InvalidArgument(toString(getType()) + " attribute '" + toString(key) + "' not allowed"); } }
bool GNEDetectorE1::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: if(myViewNet->getNet()->getAdditional(getTag(), value) == NULL) { return true; } else { return false; } case SUMO_ATTR_LANE: if(myViewNet->getNet()->retrieveLane(value, false) != NULL) { return true; } else { return false; } case SUMO_ATTR_POSITION: return (canParse<SUMOReal>(value) && parse<SUMOReal>(value) >= 0 && parse<SUMOReal>(value) <= (myLane->getLaneParametricLenght())); case SUMO_ATTR_FREQUENCY: return (canParse<SUMOReal>(value) && parse<SUMOReal>(value) >= 0); case SUMO_ATTR_FILE: return isValidFileValue(value); case SUMO_ATTR_SPLIT_VTYPE: return canParse<bool>(value); default: throw InvalidArgument(toString(getType()) + " attribute '" + toString(key) + "' not allowed"); } }