Doxygen
Loading...
Searching...
No Matches
configimpl.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2026 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef CONFIGIMPL_H
17#define CONFIGIMPL_H
18
19#include <memory>
20#include <string>
21#include <unordered_map>
22#include <vector>
23
24#include "config.h"
25#include "construct.h"
26#include "containers.h"
27#include "dstring.h"
28#include "message.h"
29
30class TextStream;
31
32/** Abstract base class for any configuration option.
33 */
35{
36 friend class ConfigImpl;
37
38 public:
40
41 /*! The type of option */
43 {
44 O_Info, //!< A section header
45 O_List, //!< A list of items
46 O_Enum, //!< A fixed set of items
47 O_String, //!< A single item
48 O_Int, //!< An integer value
49 O_Bool, //!< A boolean value
50 O_Obsolete, //!< An obsolete option
51 O_Disabled //!< Disabled compile time option
52 };
53 enum
54 {
55 /*! Maximum length of an option in the config file. Used for
56 * alignment purposes.
57 */
59 };
61 {
62 m_spaces.fill(' ',40);
63 }
64
65 /*! returns the kind of option this is. */
66 OptionType kind() const { return m_kind; }
67 DString name() const { return m_name; }
68 DString docs() const { return m_doc; }
69
70 DString dependsOn() const { return m_dependency; }
71 void addDependency(const char *dep) { m_dependency = dep; }
72 void setEncoding(const DString &e) { m_encoding = e; }
73 void setUserComment(const DString &u) { m_userComment += u; }
74
75 protected:
76 virtual void writeTemplate(TextStream &t,bool sl,bool upd) = 0;
77 virtual void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) = 0;
78 virtual void writeXMLDoxyfile(TextStream &t) = 0;
79 virtual void writeXSDDoxyfile(TextStream &t) = 0;
81 virtual void emptyValueToDefault() {}
82 virtual void substEnvVars() = 0;
83 virtual void init() {}
84 virtual bool isDefault() { return true; }
85
86 void writeBoolValue(TextStream &t,bool v,bool initSpace = true);
87 void writeIntValue(TextStream &t,int i,bool initSpace = true);
88 void writeStringValue(TextStream &t,const DString &s,bool initSpace = true,bool wasQuoted = false);
89 void writeStringList(TextStream &t,const StringVector &l);
90
98};
99
100/** Section marker for grouping the configuration options.
101 */
102class ConfigInfo final : public ConfigOption
103{
104 public:
105 ConfigInfo(const char *name,const char *doc)
107 {
108 m_name = name;
109 m_doc = doc;
110 }
111 void writeTemplate(TextStream &t, bool sl,bool) override;
113 void writeXMLDoxyfile(TextStream &) override {}
114 void writeXSDDoxyfile(TextStream &t) override {}
115 void substEnvVars() override {}
116};
117
118/** Class representing a list type option.
119 */
120class ConfigList final : public ConfigOption
121{
122 public:
124 ConfigList(const char *name,const char *doc)
126 {
127 m_name = name;
128 m_doc = doc;
130 }
131 void addValue(const char *v) { m_defaultValue.emplace_back(v); }
136 void emptyValueToDefault() override { if (m_value.empty() && !m_defaultValue.empty()) m_value=m_defaultValue; }
137 void writeTemplate(TextStream &t,bool sl,bool) override;
138 void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) override;
139 void writeXMLDoxyfile(TextStream &t) override;
140 void writeXSDDoxyfile(TextStream &t) override;
141 void substEnvVars() override;
142 void init() override { m_value = m_defaultValue; }
143 bool isDefault() override;
144 private:
148};
149
150/** Class representing an enum type option.
151 */
152class ConfigEnum final : public ConfigOption
153{
154 public:
155 ConfigEnum(const char *name,const char *doc,const char *defVal)
157 {
158 m_name = name;
159 m_doc = doc;
160 m_value = defVal;
161 m_defValue = defVal;
162 }
163 void addValue(const char *v) { m_valueRange.emplace_back(v); }
164 const std::vector<DString> &values() const { return m_valueRange; }
165 DString *valueRef() { return &m_value; }
166 void substEnvVars() override;
167 void writeTemplate(TextStream &t,bool sl,bool) override;
168 void convertStrToVal(Config::CompareMode compareMode) override;
169 void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) override;
170 void writeXMLDoxyfile(TextStream &t) override;
171 void writeXSDDoxyfile(TextStream &t) override;
172 void init() override { m_value = m_defValue; }
173 bool isDefault() override { return m_value == m_defValue; }
174
175 private:
176 std::vector<DString> m_valueRange;
179};
180
181/** Class representing a string type option.
182 */
183class ConfigString final : public ConfigOption
184{
185 public:
187 ConfigString(const char *name,const char *doc)
189 {
190 m_name = name;
191 m_doc = doc;
193 }
196 void setDefaultValue(const char *v) { m_defValue = v; }
197 DString *valueRef() { return &m_value; }
198 void writeTemplate(TextStream &t,bool sl,bool) override;
199 void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) override;
200 void writeXMLDoxyfile(TextStream &t) override;
201 void writeXSDDoxyfile(TextStream &t) override;
202 void substEnvVars() override;
203 void init() override { m_value = m_defValue; }
205 bool isDefault() override { return m_value.stripWhiteSpace() == m_defValue.stripWhiteSpace(); }
206
207 private:
211};
212
213/** Class representing an integer type option.
214 */
215class ConfigInt final : public ConfigOption
216{
217 public:
218 ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal)
220 {
221 m_name = name;
222 m_doc = doc;
223 m_value = defVal;
224 m_defValue = defVal;
227 }
229 int *valueRef() { return &m_value; }
230 int minVal() const { return m_minVal; }
231 int maxVal() const { return m_maxVal; }
232 void convertStrToVal(Config::CompareMode compareMode) override;
233 void substEnvVars() override;
234 void writeTemplate(TextStream &t,bool sl,bool upd) override;
235 void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) override;
236 void writeXMLDoxyfile(TextStream &t) override;
237 void writeXSDDoxyfile(TextStream &t) override;
238 void init() override { m_value = m_defValue; }
239 bool isDefault() override { return m_value == m_defValue; }
240 private:
246};
247
248/** Class representing a Boolean type option.
249 */
250class ConfigBool final : public ConfigOption
251{
252 public:
253 ConfigBool(const char *name,const char *doc,bool defVal)
255 {
256 m_name = name;
257 m_doc = doc;
258 m_value = defVal;
259 m_defValue = defVal;
260 }
262 bool *valueRef() { return &m_value; }
263 void convertStrToVal(Config::CompareMode compareMode) override;
264 void substEnvVars() override;
265 void setValueString(const DString &v) { m_valueString = v; }
266 void writeTemplate(TextStream &t,bool sl,bool upd) override;
267 void compareDoxyfile(TextStream &t,Config::CompareMode compareMode) override;
268 void writeXMLDoxyfile(TextStream &t) override;
269 void writeXSDDoxyfile(TextStream &t) override;
270 void init() override { m_value = m_defValue; }
271 bool isDefault() override { return m_value == m_defValue; }
272 private:
276};
277
278/** Section marker for obsolete options
279 */
280class ConfigObsolete final : public ConfigOption
281{
282 public:
285 void writeTemplate(TextStream &,bool,bool) override;
287 void writeXMLDoxyfile(TextStream &) override {}
288 void writeXSDDoxyfile(TextStream &) override {}
289 void substEnvVars() override {}
290 OptionType orgType() const { return m_orgType; }
293 void markAsPresent() { m_present = true; }
294 bool isPresent() const { return m_present; }
295 private:
299 bool m_present = false;
300};
301
302/** Section marker for compile time optional options
303 */
304class ConfigDisabled final : public ConfigOption
305{
306 public:
309 void writeTemplate(TextStream &,bool,bool) override;
311 void writeXMLDoxyfile(TextStream &) override {}
312 void writeXSDDoxyfile(TextStream &) override;
313 void substEnvVars() override {}
314};
315
316// some convenience macros for access the config options
317#define ConfigImpl_getString(val) ConfigImpl::instance()->getString(__FILE__,__LINE__,val)
318#define ConfigImpl_getInt(val) ConfigImpl::instance()->getInt(__FILE__,__LINE__,val)
319#define ConfigImpl_getList(val) ConfigImpl::instance()->getList(__FILE__,__LINE__,val)
320#define ConfigImpl_getEnum(val) ConfigImpl::instance()->getEnum(__FILE__,__LINE__,val)
321#define ConfigImpl_getBool(val) ConfigImpl::instance()->getBool(__FILE__,__LINE__,val)
322
323
324using ConfigOptionList = std::vector< std::unique_ptr<ConfigOption> >;
325using ConfigOptionMap = std::unordered_map< std::string, ConfigOption* >;
326
327/** Singleton for configuration variables.
328 *
329 * This object holds the global static variables
330 * read from a user-supplied configuration file.
331 * The static member instance() can be used to get
332 * a pointer to the one and only instance.
333 *
334 * Set all variables to their default values by
335 * calling Config::instance()->init()
336 *
337 */
339{
340 public:
341 /////////////////////////////
342 // public API
343 /////////////////////////////
344 ConfigImpl();
345
346 /*! Returns the one and only instance of this class */
348 {
349 if (!m_instance) m_instance = std::make_unique<ConfigImpl>();
350 return m_instance.get();
351 }
352 /*! Delete the instance */
353 static void deleteInstance()
354 {
355 m_instance.reset();
356 }
357
358 /*!
359 * @name Getting configuration values.
360 * @{
361 */
362
363 /*! Returns the value of the string option with name \a name.
364 * The arguments \a num and \a fileName are for debugging purposes only.
365 * There is a convenience function Config_getString() for this.
366 */
367 DString &getString(const char *fileName,int num,const char *name) const;
368
369 /*! Returns the value of the list option with name \a name.
370 * The arguments \a num and \a fileName are for debugging purposes only.
371 * There is a convenience function Config_getList() for this.
372 */
373 StringVector &getList(const char *fileName,int num,const char *name) const;
374
375 /*! Returns the value of the enum option with name \a name.
376 * The arguments \a num and \a fileName are for debugging purposes only.
377 * There is a convenience function Config_getEnum() for this.
378 */
379 DString &getEnum(const char *fileName,int num,const char *name) const;
380
381 /*! Returns the value of the integer option with name \a name.
382 * The arguments \a num and \a fileName are for debugging purposes only.
383 * There is a convenience function Config_getInt() for this.
384 */
385 int &getInt(const char *fileName,int num,const char *name) const;
386
387 /*! Returns the value of the boolean option with name \a name.
388 * The arguments \a num and \a fileName are for debugging purposes only.
389 * There is a convenience function Config_getBool() for this.
390 */
391 bool &getBool(const char *fileName,int num,const char *name) const;
392
393 /*! Returns the ConfigOption corresponding with \a name or 0 if
394 * the option is not supported.
395 */
396 ConfigOption *get(const DString &name) const
397 {
398 auto it = m_dict.find(name.str());
399 return it!=m_dict.end() ? it->second : nullptr;
400 }
401 /* @} */
402
403 /*!
404 * @name Adding configuration options.
405 * @{
406 */
407
408 /*! Starts a new configuration section with \a name and description \a doc.
409 * \returns An object representing the option.
410 */
411 ConfigInfo *addInfo(const char *name,const char *doc)
412 {
413 ConfigInfo *result = new ConfigInfo(name,doc);
414 m_options.push_back(std::unique_ptr<ConfigOption>(result));
415 return result;
416 }
417
418 /*! Adds a new string option with \a name and documentation \a doc.
419 * \returns An object representing the option.
420 */
421 ConfigString *addString(const char *name,
422 const char *doc)
423 {
424 ConfigString *result = new ConfigString(name,doc);
425 m_options.push_back(std::unique_ptr<ConfigOption>(result));
426 m_dict.emplace(name,result);
427 return result;
428 }
429
430 /*! Adds a new enumeration option with \a name and documentation \a doc
431 * and initial value \a defVal.
432 * \returns An object representing the option.
433 */
434 ConfigEnum *addEnum(const char *name,
435 const char *doc,
436 const char *defVal)
437 {
438 ConfigEnum *result = new ConfigEnum(name,doc,defVal);
439 m_options.push_back(std::unique_ptr<ConfigOption>(result));
440 m_dict.emplace(name,result);
441 return result;
442 }
443
444 /*! Adds a new string option with \a name and documentation \a doc.
445 * \returns An object representing the option.
446 */
447 ConfigList *addList(const char *name,
448 const char *doc)
449 {
450 ConfigList *result = new ConfigList(name,doc);
451 m_options.push_back(std::unique_ptr<ConfigOption>(result));
452 m_dict.emplace(name,result);
453 return result;
454 }
455
456 /*! Adds a new integer option with \a name and documentation \a doc.
457 * The integer has a range between \a minVal and \a maxVal and a
458 * default value of \a defVal.
459 * \returns An object representing the option.
460 */
461 ConfigInt *addInt(const char *name,
462 const char *doc,
463 int minVal,int maxVal,int defVal)
464 {
465 ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal);
466 m_options.push_back(std::unique_ptr<ConfigOption>(result));
467 m_dict.emplace(name,result);
468 return result;
469 }
470
471 /*! Adds a new boolean option with \a name and documentation \a doc.
472 * The boolean has a default value of \a defVal.
473 * \returns An object representing the option.
474 */
475 ConfigBool *addBool(const char *name,
476 const char *doc,
477 bool defVal)
478 {
479 ConfigBool *result = new ConfigBool(name,doc,defVal);
480 m_options.push_back(std::unique_ptr<ConfigOption>(result));
481 m_dict.emplace(name,result);
482 return result;
483 }
484
485 /*! Adds an option that has become obsolete. */
487 {
488 ConfigObsolete *result = new ConfigObsolete(name,orgType);
489 m_obsolete.push_back(std::unique_ptr<ConfigOption>(result));
490 m_dict.emplace(name,result);
491 return result;
492 }
493
494 /*! Adds an option that has been disabled at compile time. */
495 ConfigOption *addDisabled(const char *name)
496 {
497 ConfigDisabled *result = new ConfigDisabled(name);
498 m_disabled.push_back(std::unique_ptr<ConfigOption>(result));
499 m_dict.emplace(name,result);
500 return result;
501 }
502 /*! @} */
503
504 /*! Writes a template configuration to stream \a t. If \a shortIndex
505 * is \c true the description of each configuration option will
506 * be omitted.
507 */
508 void writeTemplate(TextStream &t,bool shortIndex,bool updateOnly);
509
510 /*! Writes a the differences between the current configuration and the
511 * template configuration to stream \a t.
512 */
514
515 /*! Writes a the used settings of the current configuration as XML format
516 * to stream \a t.
517 */
519
520 /*! Writes all possible setting ids to an XSD file for validation
521 * through the stream \a t.
522 */
524
525 void setHeader(const char *header) { m_header = header; }
526
527 /////////////////////////////
528 // internal API
529 /////////////////////////////
530
531 /*! Converts the string values read from the configuration file
532 * to real values for non-string type options (like int, and bools)
533 */
534 void convertStrToVal(Config::CompareMode compareMode);
535
536 /*! Sets default value in case value is empty
537 */
538 void emptyValueToDefault();
539
540 /*! Replaces references to environment variable by the actual value
541 * of the environment variable.
542 */
544
545 /*! Initialize config variables to their default value */
546 void init();
547
548 /*! Parse a configuration data in string \a str.
549 * \returns true if successful, or false if the string could not be
550 * parsed.
551 */
552 bool parseString(const DString &fn,const DString &str,bool upd = false);
553
554 /*! Parse a configuration file with name \a fn.
555 * \returns true if successful, false if the file could not be
556 * opened or read.
557 */
558 bool parse(const DString &fn,bool upd = false);
559
560 /*! Append user start comment
561 */
563 {
564 m_startComment += u;
565 }
566 /*! Append user comment
567 */
569 {
570 m_userComment += u;
571 }
572 /*! Append replacement string
573 */
575 {
576 m_storeRepl += u;
577 }
578 /*! Take the user start comment and reset it internally
579 * \returns user start comment
580 */
582 {
583 DString result=m_startComment;
585 return substitute(result,"\r","");
586 }
587 /*! Take the user comment and reset it internally
588 * \returns user comment
589 */
591 {
592 DString result=m_userComment;
594 return substitute(result,"\r","");
595 }
596 /*! Take the replacement string
597 * \returns the replacement string
598 */
600 {
601 DString result=m_storeRepl;
603 return substitute(result,"\r","");
604 }
605
606 static void config_err_ (fmt::string_view fmt, fmt::format_args args);
607 static void config_term_(fmt::string_view fmt, fmt::format_args args);
608 static void config_warn_(fmt::string_view fmt, fmt::format_args args);
609
610 template<typename ...Args>
611 static void config_err(fmt::format_string<Args...> fmt, Args&&... args)
612 {
613 config_err_(fmt,fmt::make_format_args(args...));
614 }
615
616 template<typename ...Args>
617 static void config_term(fmt::format_string<Args...> fmt, Args&&... args)
618 {
619 config_term_(fmt,fmt::make_format_args(args...));
620 }
621
622 template<typename ...Args>
623 static void config_warn(fmt::format_string<Args...> fmt, Args&&... args)
624 {
625 config_warn_(fmt,fmt::make_format_args(args...));
626 }
627
628 private:
633 static std::unique_ptr<ConfigImpl> m_instance;
638};
639
640#endif
Class representing a Boolean type option.
Definition configimpl.h:251
ConfigBool(const char *name, const char *doc, bool defVal)
Definition configimpl.h:253
void init() override
Definition configimpl.h:270
void writeTemplate(TextStream &t, bool sl, bool upd) override
Definition configimpl.l:568
bool isDefault() override
Definition configimpl.h:271
void writeXMLDoxyfile(TextStream &t) override
Definition configimpl.l:598
bool * valueRef()
Definition configimpl.h:262
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.l:610
void substEnvVars() override
DString m_valueString
Definition configimpl.h:275
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode) override
Definition configimpl.l:593
void convertStrToVal(Config::CompareMode compareMode) override
Definition configimpl.l:233
bool m_defValue
Definition configimpl.h:274
DString * valueStringRef()
Definition configimpl.h:261
void setValueString(const DString &v)
Definition configimpl.h:265
Section marker for compile time optional options.
Definition configimpl.h:305
void writeXSDDoxyfile(TextStream &) override
Definition configimpl.l:618
void writeXMLDoxyfile(TextStream &) override
Definition configimpl.h:311
ConfigDisabled(const char *name)
Definition configimpl.h:307
void compareDoxyfile(TextStream &, Config::CompareMode) override
Definition configimpl.h:310
void writeTemplate(TextStream &, bool, bool) override
Definition configimpl.l:617
void substEnvVars() override
Definition configimpl.h:313
Class representing an enum type option.
Definition configimpl.h:153
void writeTemplate(TextStream &t, bool sl, bool) override
Definition configimpl.l:442
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.l:476
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode) override
Definition configimpl.l:459
bool isDefault() override
Definition configimpl.h:173
void writeXMLDoxyfile(TextStream &t) override
Definition configimpl.l:464
std::vector< DString > m_valueRange
Definition configimpl.h:176
void init() override
Definition configimpl.h:172
void addValue(const char *v)
Definition configimpl.h:163
DString * valueRef()
Definition configimpl.h:165
const std::vector< DString > & values() const
Definition configimpl.h:164
ConfigEnum(const char *name, const char *doc, const char *defVal)
Definition configimpl.h:155
void substEnvVars() override
DString m_defValue
Definition configimpl.h:178
DString m_value
Definition configimpl.h:177
void convertStrToVal(Config::CompareMode compareMode) override
Definition configimpl.l:255
ConfigInt * addInt(const char *name, const char *doc, int minVal, int maxVal, int defVal)
Definition configimpl.h:461
ConfigEnum * addEnum(const char *name, const char *doc, const char *defVal)
Definition configimpl.h:434
ConfigOptionList m_options
Definition configimpl.h:629
static void config_term(fmt::format_string< Args... > fmt, Args &&... args)
Definition configimpl.h:617
static void deleteInstance()
Definition configimpl.h:353
DString takeStoreRepl()
Definition configimpl.h:599
ConfigOptionList m_obsolete
Definition configimpl.h:630
ConfigOptionMap m_dict
Definition configimpl.h:632
bool parseString(const DString &fn, const DString &str, bool upd=false)
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode)
DString m_userComment
Definition configimpl.h:635
DString takeUserComment()
Definition configimpl.h:590
void convertStrToVal(Config::CompareMode compareMode)
static void config_err(fmt::format_string< Args... > fmt, Args &&... args)
Definition configimpl.h:611
void appendStoreRepl(const DString &u)
Definition configimpl.h:574
ConfigOption * addDisabled(const char *name)
Definition configimpl.h:495
DString takeStartComment()
Definition configimpl.h:581
static void config_term_(fmt::string_view fmt, fmt::format_args args)
Definition configimpl.l:60
static ConfigImpl * instance()
Definition configimpl.h:347
void init()
ConfigList * addList(const char *name, const char *doc)
Definition configimpl.h:447
void substituteEnvironmentVars()
void setHeader(const char *header)
Definition configimpl.h:525
void appendStartComment(const DString &u)
Definition configimpl.h:562
DString & getEnum(const char *fileName, int num, const char *name) const
Definition configimpl.l:309
DString m_startComment
Definition configimpl.h:634
void writeXMLDoxyfile(TextStream &t)
DString m_header
Definition configimpl.h:637
StringVector & getList(const char *fileName, int num, const char *name) const
Definition configimpl.l:295
void writeXSDDoxyfile(TextStream &t)
static void config_err_(fmt::string_view fmt, fmt::format_args args)
Definition configimpl.l:55
ConfigString * addString(const char *name, const char *doc)
Definition configimpl.h:421
static void config_warn(fmt::format_string< Args... > fmt, Args &&... args)
Definition configimpl.h:623
void writeTemplate(TextStream &t, bool shortIndex, bool updateOnly)
ConfigInfo * addInfo(const char *name, const char *doc)
Definition configimpl.h:411
bool parse(const DString &fn, bool upd=false)
ConfigBool * addBool(const char *name, const char *doc, bool defVal)
Definition configimpl.h:475
DString m_storeRepl
Definition configimpl.h:636
DString & getString(const char *fileName, int num, const char *name) const
Definition configimpl.l:281
static std::unique_ptr< ConfigImpl > m_instance
Definition configimpl.h:633
static void config_warn_(fmt::string_view fmt, fmt::format_args args)
Definition configimpl.l:67
bool & getBool(const char *fileName, int num, const char *name) const
Definition configimpl.l:337
ConfigOptionList m_disabled
Definition configimpl.h:631
int & getInt(const char *fileName, int num, const char *name) const
Definition configimpl.l:323
ConfigOption * get(const DString &name) const
Definition configimpl.h:396
ConfigOption * addObsolete(const char *name, ConfigOption::OptionType orgType)
Definition configimpl.h:486
void emptyValueToDefault()
void appendUserComment(const DString &u)
Definition configimpl.h:568
Section marker for grouping the configuration options.
Definition configimpl.h:103
void substEnvVars() override
Definition configimpl.h:115
void writeXMLDoxyfile(TextStream &) override
Definition configimpl.h:113
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.h:114
ConfigInfo(const char *name, const char *doc)
Definition configimpl.h:105
void compareDoxyfile(TextStream &, Config::CompareMode) override
Definition configimpl.h:112
void writeTemplate(TextStream &t, bool sl, bool) override
Definition configimpl.l:353
Class representing an integer type option.
Definition configimpl.h:216
ConfigInt(const char *name, const char *doc, int minVal, int maxVal, int defVal)
Definition configimpl.h:218
void init() override
Definition configimpl.h:238
int * valueRef()
Definition configimpl.h:229
bool isDefault() override
Definition configimpl.h:239
int maxVal() const
Definition configimpl.h:231
void writeXMLDoxyfile(TextStream &t) override
Definition configimpl.l:551
DString * valueStringRef()
Definition configimpl.h:228
void convertStrToVal(Config::CompareMode compareMode) override
Definition configimpl.l:191
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.l:563
DString m_valueString
Definition configimpl.h:245
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode) override
Definition configimpl.l:546
int m_defValue
Definition configimpl.h:242
void writeTemplate(TextStream &t, bool sl, bool upd) override
Definition configimpl.l:522
int minVal() const
Definition configimpl.h:230
void substEnvVars() override
Class representing a list type option.
Definition configimpl.h:121
WidgetType m_widgetType
Definition configimpl.h:147
void setWidgetType(WidgetType w)
Definition configimpl.h:132
void substEnvVars() override
StringVector * valueRef()
Definition configimpl.h:134
void writeTemplate(TextStream &t, bool sl, bool) override
Definition configimpl.l:364
void init() override
Definition configimpl.h:142
void addValue(const char *v)
Definition configimpl.h:131
StringVector getDefault()
Definition configimpl.h:135
bool isDefault() override
Definition configimpl.l:381
ConfigList(const char *name, const char *doc)
Definition configimpl.h:124
StringVector m_defaultValue
Definition configimpl.h:146
StringVector m_value
Definition configimpl.h:145
void writeXMLDoxyfile(TextStream &t) override
Definition configimpl.l:418
WidgetType widgetType() const
Definition configimpl.h:133
void emptyValueToDefault() override
Definition configimpl.h:136
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.l:437
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode) override
Definition configimpl.l:413
Section marker for obsolete options.
Definition configimpl.h:281
void writeXSDDoxyfile(TextStream &) override
Definition configimpl.h:288
OptionType m_orgType
Definition configimpl.h:296
DString m_valueString
Definition configimpl.h:298
ConfigObsolete(const char *name, OptionType orgType)
Definition configimpl.h:283
void markAsPresent()
Definition configimpl.h:293
bool isPresent() const
Definition configimpl.h:294
StringVector m_listvalue
Definition configimpl.h:297
void writeTemplate(TextStream &, bool, bool) override
Definition configimpl.l:615
StringVector * valueListRef()
Definition configimpl.h:291
OptionType orgType() const
Definition configimpl.h:290
DString * valueStringRef()
Definition configimpl.h:292
void substEnvVars() override
Definition configimpl.h:289
void writeXMLDoxyfile(TextStream &) override
Definition configimpl.h:287
void compareDoxyfile(TextStream &, Config::CompareMode) override
Definition configimpl.h:286
Abstract base class for any configuration option.
Definition configimpl.h:35
virtual void convertStrToVal(Config::CompareMode)
Definition configimpl.h:80
DString dependsOn() const
Definition configimpl.h:70
DString m_spaces
Definition configimpl.h:91
DString m_encoding
Definition configimpl.h:95
void setEncoding(const DString &e)
Definition configimpl.h:72
DString m_userComment
Definition configimpl.h:96
virtual void init()
Definition configimpl.h:83
void addDependency(const char *dep)
Definition configimpl.h:71
virtual void writeXMLDoxyfile(TextStream &t)=0
ConfigOption(OptionType t)
Definition configimpl.h:60
DString name() const
Definition configimpl.h:67
virtual void writeTemplate(TextStream &t, bool sl, bool upd)=0
OptionType m_kind
Definition configimpl.h:97
void writeIntValue(TextStream &t, int i, bool initSpace=true)
Definition configimpl.l:129
void writeStringList(TextStream &t, const StringVector &l)
Definition configimpl.l:167
virtual void writeXSDDoxyfile(TextStream &t)=0
friend class ConfigImpl
Definition configimpl.h:36
void writeStringValue(TextStream &t, const DString &s, bool initSpace=true, bool wasQuoted=false)
Definition configimpl.l:135
void setUserComment(const DString &u)
Definition configimpl.h:73
DString m_dependency
Definition configimpl.h:94
virtual void emptyValueToDefault()
Definition configimpl.h:81
virtual void compareDoxyfile(TextStream &t, Config::CompareMode compareMode)=0
DString m_name
Definition configimpl.h:92
@ O_Disabled
Disabled compile time option.
Definition configimpl.h:51
@ O_List
A list of items.
Definition configimpl.h:45
@ O_Enum
A fixed set of items.
Definition configimpl.h:46
@ O_Bool
A boolean value.
Definition configimpl.h:49
@ O_String
A single item.
Definition configimpl.h:47
@ O_Obsolete
An obsolete option.
Definition configimpl.h:50
@ O_Int
An integer value.
Definition configimpl.h:48
@ O_Info
A section header.
Definition configimpl.h:44
DString docs() const
Definition configimpl.h:68
virtual void substEnvVars()=0
void writeBoolValue(TextStream &t, bool v, bool initSpace=true)
Definition configimpl.l:123
DString m_doc
Definition configimpl.h:93
OptionType kind() const
Definition configimpl.h:66
virtual bool isDefault()
Definition configimpl.h:84
Class representing a string type option.
Definition configimpl.h:184
void substEnvVars() override
bool isDefault() override
Definition configimpl.h:205
void setWidgetType(WidgetType w)
Definition configimpl.h:194
void writeXSDDoxyfile(TextStream &t) override
Definition configimpl.l:517
WidgetType m_widgetType
Definition configimpl.h:210
DString * valueRef()
Definition configimpl.h:197
WidgetType widgetType() const
Definition configimpl.h:195
void writeXMLDoxyfile(TextStream &t) override
Definition configimpl.l:503
DString m_value
Definition configimpl.h:208
void writeTemplate(TextStream &t, bool sl, bool) override
Definition configimpl.l:481
void setDefaultValue(const char *v)
Definition configimpl.h:196
DString m_defValue
Definition configimpl.h:209
void emptyValueToDefault() override
Definition configimpl.h:204
void init() override
Definition configimpl.h:203
void compareDoxyfile(TextStream &t, Config::CompareMode compareMode) override
Definition configimpl.l:498
ConfigString(const char *name, const char *doc)
Definition configimpl.h:187
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
void clear()
Definition dstring.h:214
DString fill(char c, size_t len)
Fills a string with a predefined character.
Definition dstring.h:278
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:337
const std::string & str() const
Definition dstring.h:645
Text streaming class that buffers data.
Definition textstream.h:36
std::vector< std::unique_ptr< ConfigOption > > ConfigOptionList
Definition configimpl.h:324
std::unordered_map< std::string, ConfigOption * > ConfigOptionMap
Definition configimpl.h:325
#define ABSTRACT_BASE_CLASS(cls)
Macro to implement rule of 5 for an abstract base class.
Definition construct.h:20
std::vector< std::string > StringVector
Definition containers.h:33
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
Definition dstring.cpp:485
CompareMode
Definition config.h:54
Definition message.h:146