1//===-- OptionParser.h ------------------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLDB_HOST_OPTIONPARSER_H 10#define LLDB_HOST_OPTIONPARSER_H 11 12#include <mutex> 13#include <string> 14 15#include "llvm/ADT/StringRef.h" 16#include "llvm/ADT/ArrayRef.h" 17 18struct option; 19 20namespace lldb_private { 21 22struct OptionDefinition; 23 24struct Option { 25 // The definition of the option that this refers to. 26 const OptionDefinition *definition; 27 // if not NULL, set *flag to val when option found 28 int *flag; 29 // if flag not NULL, value to set *flag to; else return value 30 int val; 31}; 32 33class OptionParser { 34public: 35 enum OptionArgument { eNoArgument = 0, eRequiredArgument, eOptionalArgument }; 36 37 static void Prepare(std::unique_lock<std::mutex> &lock); 38 39 static void EnableError(bool error); 40 41 /// Argv must be an argument vector "as passed to main", i.e. terminated with 42 /// a nullptr. 43 static int Parse(llvm::MutableArrayRef<char *> argv, 44 llvm::StringRef optstring, const Option *longopts, 45 int *longindex); 46 47 static char *GetOptionArgument(); 48 static int GetOptionIndex(); 49 static int GetOptionErrorCause(); 50 static std::string GetShortOptionString(struct option *long_options); 51}; 52} 53 54#endif // LLDB_HOST_OPTIONPARSER_H 55