147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2008 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef WEBRTC_BASE_OPTIONSFILE_H_
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define WEBRTC_BASE_OPTIONSFILE_H_
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <map>
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <string>
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Implements storage of simple options in a text file on disk. This is
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// cross-platform, but it is intended mostly for Linux where there is no
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// first-class options storage system.
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass OptionsFile {
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public:
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  OptionsFile(const std::string &path);
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Loads the file from disk, overwriting the in-memory values.
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool Load();
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Saves the contents in memory, overwriting the on-disk values.
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool Save();
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool GetStringValue(const std::string& option, std::string* out_val) const;
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool GetIntValue(const std::string& option, int* out_val) const;
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool SetStringValue(const std::string& option, const std::string& val);
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool SetIntValue(const std::string& option, int val);
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool RemoveValue(const std::string& option);
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private:
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  typedef std::map<std::string, std::string> OptionsMap;
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  static bool IsLegalName(const std::string &name);
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  static bool IsLegalValue(const std::string &value);
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::string path_;
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  OptionsMap options_;
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org};
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // WEBRTC_BASE_OPTIONSFILE_H_
50