source: trunk/src/core/RpNumber.h @ 829

Last change on this file since 829 was 511, checked in by dkearney, 18 years ago

moving all .h files to their respective src directories, updating tools.py to include python's re module, updated setup.py.in to use .h files from the installed version of rappture and to adapt to the new location of .h files. .h files are now all stored in the lib directory under the rappture installation folder. this should simplify people's code, so they dont have to include wierd search paths for header files. adjusted the paths in rappture.in, allowing people to use their own version of python and perl. octave on the other hand is still broken for people downloading our binary and not using libhdf5-1.6.2. src's makefile.in was modified to copy the .h files from the core and cee directories over to the rappture installation directory. the top level makefile.in has all kinds of changes mainly you can now type in ./configure --prefix=... --with-matlab=... and then make install. this will build and install the gui, language bindings, and examples. these changes will probably break the automatic builds but the necessary changes to the rappture-runtime package should be committed in good time.

File size: 5.3 KB
Line 
1/*
2 * ======================================================================
3 *  Copyright (c) 2004-2005  Purdue Research Foundation
4 *
5 *  See the file "license.terms" for information on usage and
6 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 * ======================================================================
8 */
9#include <iostream>
10#include <string>
11#include <sstream>
12#include <stdlib.h>
13#include <errno.h>
14
15
16// #include "RpLibrary.h"
17
18#ifndef _RpVARIABLE_H
19    #include "RpVariable.h"
20#endif
21
22#ifndef _RpUNITS_H
23    #include "RpUnits.h"
24#endif
25
26#ifndef _RpNUMBER_H
27#define _RpNUMBER_H
28
29class RpNumber : public RpVariable
30{
31    public:
32
33        // users member fxns
34
35        /*
36        virtual RpNumber& setUnits(std::string newUnits);
37        */
38
39        virtual RpNumber& setDefaultValue(double newDefaultVal);
40        virtual RpNumber& setCurrentValue(double newCurrentVal);
41        virtual RpNumber& setMin(double newMin);
42        virtual RpNumber& setMax(double newMax);
43
44        std::string getUnits() const;
45        // changed from "Value" to "Val" because base class makes
46        // these functions virtual and derived class has a different
47        // return type. compiler doesnt like this. need to find another
48        // way around this
49        //
50        // if we keep the null_val=NULL will that give us undefined behavior?
51        //
52        double getDefaultValue(void* null_val=NULL) const;
53        double getCurrentValue(void* null_val=NULL) const;
54        double getMin() const;
55        double getMax() const;
56
57        double convert( std::string toUnitStr,
58                        int storeResult,
59                        int* result = NULL  );
60        double convert(std::string toUnitStr, int* result = NULL);
61        double convert(const RpUnits* toUnit, int* result = NULL);
62
63        // place the information from this object into the xml library 'lib'
64        // virtual RpNumber& put(RpLibrary lib);
65        RpNumber& put() const;
66        RpNumber& put(double currentVal);
67
68
69
70        /*
71         * user provides a 'path' for where this object lives in xml file
72         * user calls define with standard hints as described in Number docs
73         *  'units' - string providing units of the number
74         *  'defaultVal' - numeric value to be used if user provides no value
75         *  'min' - (optional) minimum allowed value
76         *  'max' - (optional) maximum allowed value
77         *  'label' - (optional) name of the input for a gui field
78         *  'desc' - (optional) description of the input for the gui
79         *
80         *  Notes:
81         *      if the user sets a min or max value the following applies:
82         *          if the value of min is greater than the value of default,
83         *          then min will be set to default
84         *
85         *          if the value of max is less than the value of default,
86         *          then max will be set to default.
87         *
88         *
89         *
90         */
91
92        /* what about unit-less numbers */
93        RpNumber (
94                    std::string path,
95                    std::string units,
96                    double defaultVal
97                )
98            :   RpVariable  (path, new double (defaultVal) ),
99                // units       (units),
100                min         (0),
101                max         (0),
102                minmaxSet   (0)
103        {
104            this->units = RpUnits::find(units);
105            if (! this->units) {
106                this->units = RpUnits::define(units,NULL);
107            }
108        }
109
110        RpNumber (
111                    std::string path,
112                    std::string units,
113                    double defaultVal,
114                    double min,
115                    double max,
116                    std::string label,
117                    std::string desc
118                )
119            :   RpVariable  (path, new double (defaultVal), label, desc),
120                // units       (units),
121                min         (min),
122                max         (max),
123                minmaxSet   (0)
124        {
125
126            this->units = RpUnits::find(units);
127            if (! this->units) {
128                this->units = RpUnits::define(units,NULL);
129            }
130
131            if ((min == 0) && (max == 0)) {
132                minmaxSet = 0;
133            }
134            else {
135
136                if (min > defaultVal) {
137                    this->min = defaultVal;
138                }
139
140                if (max < defaultVal) {
141                    this->max = defaultVal;
142                }
143            }
144
145        }
146
147        // copy constructor
148        RpNumber ( const RpNumber& myRpNumber )
149            :   RpVariable(myRpNumber),
150                units       (myRpNumber.units),
151                min         (myRpNumber.min),
152                max         (myRpNumber.max),
153                minmaxSet   (myRpNumber.minmaxSet)
154        {}
155
156        // default destructor
157        // virtual ~RpNumber ()
158        virtual ~RpNumber ()
159        {
160            // clean up dynamic memory
161
162        }
163    private:
164
165        // std::string units;
166        const RpUnits* units;
167        double min;
168        double max;
169
170        // flag to tell if the user specified the min and max values
171        int minmaxSet;
172
173};
174
175/*--------------------------------------------------------------------------*/
176/*--------------------------------------------------------------------------*/
177
178#endif
Note: See TracBrowser for help on using the repository browser.