name_value_pairs_parser.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_CHROMEOS_NAME_VALUE_PAIRS_PARSER_H_
6#define CHROME_BROWSER_CHROMEOS_NAME_VALUE_PAIRS_PARSER_H_
7#pragma once
8
9#include <map>
10#include <string>
11#include <vector>
12
13#include "base/basictypes.h"
14
15namespace chromeos {
16
17// The parser is used to get machine info as name-value pairs. Defined
18// here to be accessable by tests.
19class NameValuePairsParser {
20 public:
21  typedef std::map<std::string, std::string> NameValueMap;
22
23  // The obtained info will be written into machine_info.
24  explicit NameValuePairsParser(NameValueMap* map);
25
26  void AddNameValuePair(const std::string& key, const std::string& value);
27
28  // Executes tool and inserts (key, <output>) into map_.
29  bool GetSingleValueFromTool(int argc, const char* argv[],
30                              const std::string& key);
31  // Executes tool, parses the output using ParseNameValuePairs,
32  // and inserts the results into name_value_pairs_.
33  bool ParseNameValuePairsFromTool(int argc, const char* argv[],
34                                   const std::string& eq,
35                                   const std::string& delim);
36
37 private:
38  // This will parse strings with output in the format:
39  // <key><EQ><value><DELIM>[<key><EQ><value>][...]
40  // e.g. ParseNameValuePairs("key1=value1 key2=value2", "=", " ")
41  bool ParseNameValuePairs(const std::string& in_string,
42                           const std::string& eq,
43                           const std::string& delim);
44
45  NameValueMap* map_;
46
47  DISALLOW_COPY_AND_ASSIGN(NameValuePairsParser);
48};
49
50}  // namespace chromeos
51
52#endif  // CHROME_BROWSER_CHROMEOS_NAME_VALUE_PAIRS_PARSER_H_
53