Branch data Line data Source code
1 : : /*
2 : : * variable.h - generic variable class definitions
3 : : *
4 : : * Copyright (C) 2004, 2007 Stefan Jahn <stefan@lkcc.org>
5 : : *
6 : : * This is free software; you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation; either version 2, or (at your option)
9 : : * any later version.
10 : : *
11 : : * This software is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this package; see the file COPYING. If not, write to
18 : : * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
19 : : * Boston, MA 02110-1301, USA.
20 : : *
21 : : * $Id$
22 : : *
23 : : */
24 : :
25 : : #ifndef __VARIABLE_H__
26 : : #define __VARIABLE_H__
27 : :
28 : : #include <string>
29 : :
30 : : #include "components/microstrip/substrate.h"
31 : : #include "analysis.h"
32 : : #include "equation.h"
33 : :
34 : :
35 : :
36 : : //using namespace qucs::eqn;
37 : : namespace qucs {
38 : :
39 : : // Enumerate possible types of variables.
40 : : enum variably_type {
41 : : VAR_UNKNOWN = -1, // not yet defined
42 : : VAR_CONSTANT, // equation constant
43 : : VAR_REFERENCE, // equation reference
44 : : VAR_SUBSTRATE, // substrate definition
45 : : VAR_VALUE, // equation result
46 : : VAR_ANALYSIS // analysis
47 : : };
48 : :
49 : : class substrate;
50 : : class analysis;
51 : :
52 : : namespace eqn {
53 : : class equation;
54 : : class constant;
55 : : }
56 : :
57 : :
58 : : class variable
59 : : {
60 : : public:
61 : : variable ();
62 : : variable (const char * const n);
63 : : variable (const variable &);
64 [ - + ]: 330 : virtual ~variable () = default;
65 : :
66 : : //! Sets the name of the variable
67 : : void setName (const char * const n) {
68 : : name = n ? std::string(n) : std::string();
69 : : };
70 : :
71 : : //! Returns the name of the variable.
72 : 101100 : const char * getName (void) const {
73 : 101100 : return this->name.c_str();
74 : : };
75 : 165 : void setNext (variable * const v) { next = v; }
76 : 41249 : variable * getNext (void) const { return next; }
77 : :
78 : : void setType (const int t) { type = t; }
79 : 646644 : int getType (void) const { return type; }
80 : :
81 : 168 : void setConstant (eqn::constant * const c) { type = VAR_CONSTANT; value.c = c; }
82 : 629871 : eqn::constant * getConstant (void) const { return value.c; }
83 : 0 : void setReference (eqn::reference * const r) { type = VAR_REFERENCE; value.r = r; }
84 : 0 : eqn::reference * getReference (void) const { return value.r; }
85 : 3 : void setSubstrate (substrate * const s) { type = VAR_SUBSTRATE; value.s = s; }
86 : 27 : substrate * getSubstrate (void) { return value.s; }
87 : 0 : void setValue (eqn::constant * const v) { type = VAR_VALUE; value.v = v; }
88 : 0 : eqn::constant * getValue (void) { return value.v; }
89 : : void setAnalysis (analysis * const a) { type = VAR_ANALYSIS; value.a = a; }
90 : : analysis * getAnalysis (void) const { return this->value.a; }
91 : : const char * toString (void);
92 : 84 : void setPassing (const bool p) { this->pass = p; }
93 : 0 : bool getPassing (void) const { return this->pass; }
94 : :
95 : : private:
96 : : std::string name;
97 : : bool pass;
98 : : int type;
99 : : union value_t {
100 : : eqn::constant * c; // equation constant
101 : : eqn::reference * r; // equation reference
102 : : substrate * s; // substrate definition
103 : : eqn::constant * v; // equation result
104 : : analysis * a; // analysis
105 : : } value;
106 : : variable * next;
107 : : };
108 : :
109 : : } // namespace qucs
110 : :
111 : : #endif /* __VARIABLE_H__ */
|