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