- add sources.
[platform/framework/web/crosswalk.git] / src / chromeos / system / name_value_pairs_parser.h
1 // Copyright (c) 2012 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 CHROMEOS_SYSTEM_NAME_VALUE_PAIRS_PARSER_H_
6 #define CHROMEOS_SYSTEM_NAME_VALUE_PAIRS_PARSER_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "chromeos/chromeos_export.h"
13
14 namespace base {
15 class FilePath;
16 }
17
18 namespace chromeos {
19 namespace system {
20
21 // The parser is used to get machine info as name-value pairs. Defined
22 // here to be accessible by tests.
23 class CHROMEOS_EXPORT NameValuePairsParser {
24  public:
25   typedef std::map<std::string, std::string> NameValueMap;
26
27   // The obtained info will be written into the given map.
28   explicit NameValuePairsParser(NameValueMap* map);
29
30   void AddNameValuePair(const std::string& key, const std::string& value);
31
32   // Executes tool and inserts (key, <output>) into map_.
33   // The program name (argv[0]) should be an absolute path. The function
34   // checks if the program exists before executing it as some programs
35   // don't exist on Linux desktop; returns false in that case.
36   bool GetSingleValueFromTool(int argc, const char* argv[],
37                               const std::string& key);
38
39   // Parses name-value pairs from the file.
40   // Returns false if there was any error in the file. Valid pairs will still be
41   // added to the map.
42   bool GetNameValuePairsFromFile(const base::FilePath& file_path,
43                                  const std::string& eq,
44                                  const std::string& delim);
45
46   // These will parse strings with output in the format:
47   // <key><EQ><value><DELIM>[<key><EQ><value>][...]
48   // e.g. ParseNameValuePairs("key1=value1 key2=value2", "=", " ")
49   // Returns false if there was any error in in_string. Valid pairs will still
50   // be added to the map.
51   bool ParseNameValuePairs(const std::string& in_string,
52                            const std::string& eq,
53                            const std::string& delim);
54
55   // This version allows for values which end with a comment
56   // beginning with comment_delim.
57   // e.g. "key2=value2 # Explanation of value\n"
58   // Returns false if there was any error in in_string. Valid pairs will still
59   // be added to the map.
60   bool ParseNameValuePairsWithComments(const std::string& in_string,
61                                        const std::string& eq,
62                                        const std::string& delim,
63                                        const std::string& comment_delim);
64
65   // Same as ParseNameValuePairsWithComments(), but uses the output of the given
66   // tool as the input to parse.
67   bool ParseNameValuePairsFromTool(
68       int argc,
69       const char* argv[],
70       const std::string& eq,
71       const std::string& delim,
72       const std::string& comment_delim);
73
74  private:
75   NameValueMap* map_;
76
77   DISALLOW_COPY_AND_ASSIGN(NameValuePairsParser);
78 };
79
80 }  // namespace system
81 }  // namespace chromeos
82
83 #endif  // CHROMEOS_SYSTEM_NAME_VALUE_PAIRS_PARSER_H_