File: Configurable.hh

package info (click to toggle)
xtide 2.9.5-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 2,996 kB
  • ctags: 2,141
  • sloc: cpp: 20,379; sh: 1,044; makefile: 224; yacc: 114; lex: 58
file content (115 lines) | stat: -rw-r--r-- 4,037 bytes parent folder | download | duplicates (3)
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
// $Id: Configurable.hh 2641 2007-09-02 21:31:02Z flaterco $

/*  Configurable:  A setting or a switch.

    Copyright (C) 2004  David Flater.

    This program 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 of the License, or
    (at your option) any later version.

    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/

class PredictionValue;
typedef SafeVector<Dstr> DstrVector;


// Configurable must be an aggregate so that we can initialize it with
// an initializer-list.  That means no inheriting from Nullable even
// though it is, in fact, nullable.  An aggregate may not have a
// constructor.

struct Configurable {

  // Enum values are postfixed with Kind, Rep, and Interp to avoid
  // stepping on reserved words.


  // Settings are those configurables enumerated at
  // http://www.flaterco.com/xtide/settings.html, which have
  // representations as preprocessor defines, X resources, xtide.xml
  // attributes, and command line switches.

  // Switches are those configurables enumerated at
  // http://www.flaterco.com/xtide/tty.html, which are not available
  // in any form except command line switches.

  // Switches recognized by X11 are magically removed from the command
  // line by XtOpenDisplay, so it is not necessary to handle them
  // here.

  enum Kind {settingKind,
             switchKind};


  // Representation tells you which of the data types is used.

  enum Representation {unsignedRep,
                       doubleRep,
                       charRep,
                       dstrRep,
                       predictionValueRep,
                       dstrVectorRep};


  // Interpretation constrains the allowable values.  No value is
  // constrained to be not null.  All constraint checking is done
  // in Settings.cc.

  enum Interpretation {
    booleanInterp,     // constrains charRep to 'y' or 'n'
    posIntInterp,      // constrains unsignedRep to be > 0
    posDoubleInterp,   // constrains doubleRep to be > 0.0
    nonnegativeDoubleInterp, // constrains doubleRep to be >= 0.0
    glDoubleInterp,    // constrains doubleRep to have one of the gl values
    modeInterp,        // constrains charRep to be one of the mode characters
    formatInterp,      // constrains charRep to be one of the format characters
    colorInterp,       // constrains dstrRep to contain a color spec
    unitInterp,        // constrains dstrRep to be "ft", "m", or "x"
    timeFormatInterp,  // constrains dstrRep to be a strftime format string
    eventMaskInterp,   // constrains dstrRep to be a valid eventmask
    numberInterp,      // a scanf %f must succeed on the input
    textInterp         // the input cannot be a null pointer or empty string
  };


  Dstr switchName;     // 2-character ID used on command line and XML
  Dstr resourceName;   // X resource name sans XTide* prefix

  // For use in control panel.  If null, do not offer option in control panel.
  Dstr caption;

  Kind kind;
  Representation representation;
  Interpretation interpretation;

  // See comments at top regarding inheritance from Nullable.
  bool isNull;

  // This glob of attributes is collectively "value."  The space saved
  // by a union would not be worth the inconvenience.

  unsigned        u;
  double          d;
  char            c;
  Dstr            s;
  PredictionValue p;
  DstrVector      v;

  // Only unsigned configurables can have minimum values, so why make
  // it complicated.
  unsigned minValue;
};

// Keyed by switchName.
typedef BetterMap<const Dstr, Configurable> ConfigurablesMap;

// Cleanup2006 Done