void CvrpFileReader::processLine(QStringList l_wordList, QString l_line) { switch (Utils::findEnumForKeyword(l_wordList[0])) { case Utils::e_keywords::NAME: readName(l_wordList); break; case Utils::e_keywords::COMMENT: readComment(l_line); break; case Utils::e_keywords::TYPE: readVrpType(l_wordList); break; case Utils::e_keywords::DIMENSION: readDimension(l_wordList); break; case Utils::e_keywords::EDGE_WEIGHT_TYPE: readEdgesType(l_wordList); break; case Utils::e_keywords::CAPACITY: readCapacity(l_wordList); break; case Utils::e_keywords::NODE_COORD_SECTION: readCoordinates(); break; case Utils::e_keywords::DEMAND_SECTION: readDemands(); break; case Utils::e_keywords::DEPOT_SECTION: readDepots(); break; case Utils::e_keywords::END: break; case Utils::e_keywords::EDGE_WEIGHT_FORMAT: case Utils::e_keywords::EDGE_DATA_FORMAT: case Utils::e_keywords::NODE_COORD_TYPE: case Utils::e_keywords::DISPLAY_DATA_TYPE: case Utils::e_keywords::EDGE_DATA_SECTION: case Utils::e_keywords::FIXED_EDGE_SECTION: case Utils::e_keywords::DISPLAY_DATA_SECTION: case Utils::e_keywords::TOUR_SECTION: case Utils::e_keywords::EDGE_WEIGHT_SECTION: case Utils::e_keywords::UNDEFINED: throw std::runtime_error(std::string("Unimplemented token!")); default: throw std::runtime_error(std::string("Undefined token!")); } }
static #endif UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range) { UA_Int32 index = 0; size_t dimensionsMax = 0; struct UA_NumericRangeDimension *dimensions = NULL; UA_StatusCode retval = UA_STATUSCODE_GOOD; size_t pos = 0; do { /* alloc dimensions */ if(index >= (UA_Int32)dimensionsMax) { struct UA_NumericRangeDimension *newds; newds = UA_realloc(dimensions, sizeof(struct UA_NumericRangeDimension) * (dimensionsMax + 2)); if(!newds) { retval = UA_STATUSCODE_BADOUTOFMEMORY; break; } dimensions = newds; dimensionsMax = dimensionsMax + 2; } /* read the dimension */ size_t progress = readDimension(&str->data[pos], str->length - pos, &dimensions[index]); if(progress == 0) { retval = UA_STATUSCODE_BADINDEXRANGEINVALID; break; } pos += progress; index++; /* loop into the next dimension */ if(pos >= str->length) break; } while(str->data[pos] == ',' && pos++); if(retval == UA_STATUSCODE_GOOD && index > 0) { range->dimensions = dimensions; range->dimensionsSize = index; } else UA_free(dimensions); return retval; }