summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/general/gr_prefs.h
blob: 4e11d04c5b78f413fd6bf3678bffaef96e1d65d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* -*- c++ -*- */
/*
 * Copyright 2006,2013 Free Software Foundation, Inc.
 *
 * This file is part of GNU Radio
 *
 * GNU Radio is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3, or (at your option)
 * any later version.
 *
 * GNU Radio is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GNU Radio; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street,
 * Boston, MA 02110-1301, USA.
 */

#ifndef INCLUDED_GR_PREFS_H
#define INCLUDED_GR_PREFS_H

#include <gr_core_api.h>
#include <string>
#include <map>
#include <gruel/thread.h>

typedef std::map< std::string, std::map<std::string, std::string> > gr_config_map_t;
typedef std::map< std::string, std::map<std::string, std::string> >::iterator gr_config_map_itr;
typedef std::map<std::string, std::string> gr_config_map_elem_t;
typedef std::map<std::string, std::string>::iterator gr_config_map_elem_itr;

/*!
 * \brief Base class for representing user preferences a la windows INI files.
 * \ingroup misc
 *
 * The real implementation is in Python, and is accessable from C++
 * via the magic of SWIG directors.
 */

class GR_CORE_API gr_prefs
{
public:
  static gr_prefs *singleton();
  static void set_singleton(gr_prefs *p);

  gr_prefs();
  virtual ~gr_prefs();

  /*!
   * \brief Returns the configuration options as a string.
   */
  std::string to_string();

  /*!
   * \brief Saves the configuration settings to ${HOME}/.gnuradio/config.conf.
   *
   * WARNING: this will overwrite your current config.conf file.
   */
  void save();

  /*!
   * \brief Does \p section exist?
   */
  virtual bool has_section(const std::string &section);

  /*!
   * \brief Does \p option exist?
   */
  virtual bool has_option(const std::string &section, const std::string &option);

  /*!
   * \brief If option exists return associated value; else default_val.
   */
  virtual const std::string get_string(const std::string &section,
				       const std::string &option,
				       const std::string &default_val);

  /*!
   * \brief Set or add a string \p option to \p section with value \p val.
   */
  virtual void set_string(const std::string &section,
                          const std::string &option,
                          const std::string &val);

  /*!
   * \brief If option exists and value can be converted to bool, return it; else default_val.
   */
  virtual bool get_bool(const std::string &section,
			const std::string &option,
			bool default_val);

  /*!
   * \brief Set or add a bool \p option to \p section with value \p val.
   */
  virtual void set_bool(const std::string &section,
			const std::string &option,
			bool val);

  /*!
   * \brief If option exists and value can be converted to long, return it; else default_val.
   */
  virtual long get_long(const std::string &section,
			const std::string &option,
			long default_val);

  /*!
   * \brief Set or add a long \p option to \p section with value \p val.
   */
  virtual void set_long(const std::string &section,
			const std::string &option,
			long val);

  /*!
   * \brief If option exists and value can be converted to double, return it; else default_val.
   */
  virtual double get_double(const std::string &section,
			    const std::string &option,
			    double default_val);

  /*!
   * \brief Set or add a double \p option to \p section with value \p val.
   */
  virtual void set_double(const std::string &section,
                          const std::string &option,
                          double val);

 protected:
  virtual std::vector<std::string> _sys_prefs_filenames();
  virtual void _read_files();
  virtual void _convert_to_map(const std::string &conf);
  virtual char * option_to_env(std::string section, std::string option);

 private:
  gruel::mutex d_mutex;
  gr_config_map_t d_config_map;
};


#endif /* INCLUDED_GR_PREFS_H */