xc
OpBinario.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // xc utils library; general purpose classes and functions.
4 //
5 // Copyright (C) Luis C. Pérez Tato
6 //
7 // XC utils is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // This software is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program.
19 // If not, see <http://www.gnu.org/licenses/>.
20 //----------------------------------------------------------------------------
21 //OpBinario.h
22 
23 #ifndef OPBINARIO_H
24 #define OPBINARIO_H
25 
26 #include "Operador.h"
27 #include "operator_names.h"
28 
29 class Rama;
30 
32 class OpBinario : public Operador
33  {
34  public:
35  OpBinario(void) : Operador() {}
36  OpBinario(const int &p): Operador(p) {}
37  OpBinario(const OpBinario &otro): Operador(otro) {}
38  OpBinario &operator=(const OpBinario &otro)
39  {
40  Operador::operator =(otro);
41  return *this;
42  }
43  inline virtual Clase GetClase(void) const
44  { return op_binario; }
45  inline virtual Posicion GetPosicion(void) const
46  { return infija; }
47  Rama *operator()(Rama *r1,Rama *r2) const;
48  };
49 
50 class OpSuma : public OpBinario
51  {
52 
53  public:
54  OpSuma(void) : OpBinario() {}
55  inline virtual const std::string &getName(void) const
56  { return nmbOpSuma; }
57  virtual int GetPrioridad(void) const
58  { return 4; }
59  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
60  virtual Rama Diferencia(const Variable &,const Rama &r) const;
61  virtual Rama *Simplifica(Rama *r) const;
62  };
63 
64 class OpResta : public OpBinario
65  {
66 
67  public:
68  OpResta(void) : OpBinario() {}
69  inline virtual const std::string &getName(void) const
70  { return nmbOpResta; }
71  virtual int GetPrioridad(void) const
72  { return 4; }
73  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
74  virtual Rama Diferencia(const Variable &,const Rama &r) const;
75  };
76 
77 class OpProd : public OpBinario
78  {
79 
80  public:
81  OpProd(void) : OpBinario() {}
82  inline virtual const std::string &getName(void) const
83  { return nmbOpProd; }
84  virtual int GetPrioridad(void) const
85  { return 5; }
86  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
87  virtual Rama Diferencia(const Variable &,const Rama &r) const;
88  virtual Rama *Simplifica(Rama *r) const;
89  Rama *DistribDcha(Rama *raiz) const;
90  Rama *DistribIzda(Rama *raiz) const;
91  Rama *Distrib(Rama *r) const;
92  };
93 
94 class OpDiv : public OpBinario
95  {
96 
97  public:
98  OpDiv(void) : OpBinario() {}
99  inline virtual const std::string &getName(void) const
100  { return nmbOpDiv; }
101  virtual int GetPrioridad(void) const
102  { return 5; }
103  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
104  virtual Rama Diferencia(const Variable &,const Rama &r) const;
105  };
106 
107 class OpDivEnt : public OpBinario
108  {
109 
110  public:
111  OpDivEnt(void) : OpBinario() {}
112  inline virtual const std::string &getName(void) const
113  { return nmbOpDivEnt; }
114  virtual int GetPrioridad(void) const
115  { return 5; }
116  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
117  };
118 
119 class OpMod : public OpBinario
120  {
121 
122  public:
123  OpMod(void) : OpBinario() {}
124  inline virtual const std::string &getName(void) const
125  { return nmbOpMod; }
126  virtual int GetPrioridad(void) const
127  { return 5; }
128  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
129  };
130 
131 class OpPot : public OpBinario
132  {
133 
134  public:
135  OpPot(void) : OpBinario() {}
136  inline virtual const std::string &getName(void) const
137  { return nmbOpPot; }
138  virtual int GetPrioridad(void) const
139  { return 6; }
140  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
141  };
142 
145 class OpMax : public OpBinario
146  {
147 
148  public:
149  OpMax(void) : OpBinario() {}
150  inline virtual const std::string &getName(void) const
151  { return nmbOpMax; }
152  virtual int GetPrioridad(void) const
153  { return 4; }
154  inline virtual Posicion GetPosicion(void) const
155  { return prefija; }
156  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
157  };
158 
161 class OpMin : public OpBinario
162  {
163 
164  public:
165  OpMin(void) : OpBinario() {}
166  inline virtual const std::string &getName(void) const
167  { return nmbOpMin; }
168  virtual int GetPrioridad(void) const
169  { return 4; }
170  inline virtual Posicion GetPosicion(void) const
171  { return prefija; }
172  virtual const Operando &Opera(const Operando *v1= NULL,const Operando *v2= NULL) const;
173  };
174 
175 #endif
Clase base de los operadores unarios y binarios.
Definition: Operador.h:30
Definition: Variable.h:31
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:82
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:112
Definition: OpBinario.h:131
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:99
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:69
Definition: OpBinario.h:94
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:166
Operando.
Definition: Operando.h:42
Definition: OpBinario.h:64
Definition: OpBinario.h:50
Definition: Rama.h:33
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:150
Operador min.
Definition: OpBinario.h:161
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:55
Definition: OpBinario.h:119
Operador binario.
Definition: OpBinario.h:32
Operador max.
Definition: OpBinario.h:145
Definition: OpBinario.h:107
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:136
virtual Rama * Distrib(Rama *) const
En su caso, aplica la propiedad distributiva.
Definition: Operando.cc:42
virtual Rama * Simplifica(Rama *) const
Simplifica la expresión.
Definition: Operando.cc:38
virtual const std::string & getName(void) const
Return the operand name.
Definition: OpBinario.h:124
Definition: OpBinario.h:77