Flutter Engine
fml::internal::CommandLineBuilder Class Referencefinal

#include <command_line.h>

Public Member Functions

 CommandLineBuilder ()
 
 ~CommandLineBuilder ()
 
bool ProcessArg (const std::string &arg)
 
CommandLine Build () const
 

Detailed Description

Definition at line 146 of file command_line.h.

Constructor & Destructor Documentation

◆ CommandLineBuilder()

fml::internal::CommandLineBuilder::CommandLineBuilder ( )

Definition at line 86 of file command_line.cc.

86 {}

◆ ~CommandLineBuilder()

fml::internal::CommandLineBuilder::~CommandLineBuilder ( )

Definition at line 87 of file command_line.cc.

87 {}

Member Function Documentation

◆ Build()

CommandLine fml::internal::CommandLineBuilder::Build ( ) const

Definition at line 132 of file command_line.cc.

References fml::CommandLine::CommandLine().

Referenced by fml::CommandLineFromIteratorsFindFirstPositionalArg(), and fml::CommandLineFromIteratorsWithArgv0().

132  {
133  if (!has_argv0_) {
134  return CommandLine();
135  }
136  return CommandLine(argv0_, options_, positional_args_);
137 }

◆ ProcessArg()

bool fml::internal::CommandLineBuilder::ProcessArg ( const std::string &  arg)

Definition at line 89 of file command_line.cc.

Referenced by fml::CommandLineFromIteratorsFindFirstPositionalArg(), and fml::CommandLineFromIteratorsWithArgv0().

89  {
90  if (!has_argv0_) {
91  has_argv0_ = true;
92  argv0_ = arg;
93  return false;
94  }
95 
96  // If we've seen a positional argument, then the remaining arguments are also
97  // positional.
98  if (started_positional_args_) {
99  bool rv = positional_args_.empty();
100  positional_args_.push_back(arg);
101  return rv;
102  }
103 
104  // Anything that doesn't start with "--" is a positional argument.
105  if (arg.size() < 2u || arg[0] != '-' || arg[1] != '-') {
106  bool rv = positional_args_.empty();
107  started_positional_args_ = true;
108  positional_args_.push_back(arg);
109  return rv;
110  }
111 
112  // "--" ends option processing, but isn't stored as a positional argument.
113  if (arg.size() == 2u) {
114  started_positional_args_ = true;
115  return false;
116  }
117 
118  // Note: The option name *must* be at least one character, so start at
119  // position 3 -- "--=foo" will yield a name of "=foo" and no value. (Passing a
120  // starting |pos| that's "too big" is OK.)
121  size_t equals_pos = arg.find('=', 3u);
122  if (equals_pos == std::string::npos) {
123  options_.push_back(CommandLine::Option(arg.substr(2u)));
124  return false;
125  }
126 
127  options_.push_back(CommandLine::Option(arg.substr(2u, equals_pos - 2u),
128  arg.substr(equals_pos + 1u)));
129  return false;
130 }

The documentation for this class was generated from the following files: