Example #1
0
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;
}