// Copyright 2019 The Shaderc Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "libshaderc_util/args.h" #include #include namespace shaderc_util { bool GetOptionArgument(int argc, char** argv, int* index, const std::string& option, string_piece* option_argument) { const string_piece arg = argv[*index]; assert(arg.starts_with(option)); if (arg.size() != option.size()) { *option_argument = arg.substr(option.size()); return true; } if (option.back() == '=') { *option_argument = ""; return true; } if (++(*index) >= argc) return false; *option_argument = argv[*index]; return true; } bool ParseUint32(const std::string& str, uint32_t* value) { std::istringstream iss(str); iss >> std::setbase(0); iss >> *value; // We should have read something. bool ok = !str.empty() && !iss.bad(); // It should have been all the text. ok = ok && iss.eof(); // It should have been in range. ok = ok && !iss.fail(); // Work around a bugs in various C++ standard libraries. // Count any negative number as an error, including "-0". ok = ok && (str[0] != '-'); return ok; } } // namespace shaderc_util