FLOPC++
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
FlopCpp
src
MP_expression.hpp
Go to the documentation of this file.
1
// ******************** FlopCpp **********************************************
2
// File: MP_expression.hpp
3
// $Id$
4
// Author: Tim Helge Hultberg (thh@mat.ua.pt)
5
// Copyright (C) 2003 Tim Helge Hultberg
6
// All Rights Reserved.
7
// ****************************************************************************
8
9
#ifndef _MP_expression_hpp_
10
#define _MP_expression_hpp_
11
12
#include <vector>
13
#include <set>
14
using
std::vector;
15
using
std::set;
16
17
#include "
MP_domain.hpp
"
18
#include "
MP_constant.hpp
"
19
#include "
MP_utilities.hpp
"
20
21
namespace
flopc {
22
23
class
MP_constraint;
24
class
TerminalExpression;
25
class
MP_variable;
26
class
VariableRef;
27
28
class
MP
{
29
friend
class
MP_expression
;
30
friend
class
MP_constraint
;
31
friend
class
MP_model
;
32
friend
class
Messenger
;
33
friend
class
VerboseMessenger
;
34
friend
class
CoefLess
;
35
friend
class
MP_expression_base
;
36
friend
class
VariableRef
;
37
38
struct
Coef
{
39
Coef
(
int
c,
int
r,
double
v,
int
s = 0) :
40
col
(c),
row
(r),
stage
(s),
val
(v) {}
41
int
col
,
row
,
stage
;
42
double
val
;
43
};
44
45
struct
CoefLess
{
46
bool
operator()
(
const
MP::Coef
& a,
const
MP::Coef
& b)
const
;
47
};
48
49
protected
:
50
class
GenerateFunctor
:
public
Functor
{
51
public
:
52
GenerateFunctor
(
MP_constraint
* r, vector<Coef>& cfs):
R
(r),
Coefs
(cfs) {}
53
54
void
setMultiplicator
(vector<Constant>& mults,
double
m) {
55
multiplicators
= mults;
56
M
= m;
57
}
58
void
setTerminalExpression
(
const
TerminalExpression
* c) {
59
C
= c;
60
}
61
62
void
operator()
()
const
;
63
private
:
64
vector<Constant>
multiplicators
;
65
MP_constraint
*
R
;
66
double
M
;
// sign (1=lhs, -1=rhs)
67
const
TerminalExpression
*
C
;
68
vector<MP::Coef>&
Coefs
;
69
};
70
};
71
72
78
class
MP_expression_base
{
79
friend
class
MP_expression
;
80
friend
class
Handle
<
MP_expression_base
*>;
81
private
:
82
int
count
;
83
public
:
84
MP_expression_base
() :
count
(0) {}
85
86
virtual
double
level
()
const
= 0;
87
virtual
void
generate
(
const
MP_domain
& domain,
88
vector<Constant> multiplicators,
89
MP::GenerateFunctor
&f,
90
double
m)
const
= 0;
91
92
virtual
void
insertVariables
(set<MP_variable*>& v)
const
= 0;
93
94
virtual
~MP_expression_base
() {}
95
};
96
97
110
class
MP_expression
:
public
Handle
<MP_expression_base*> {
111
public
:
112
MP_expression
() :
Handle
<
MP_expression_base
*>(0) {}
114
MP_expression
(
const
Constant
& c);
116
MP_expression
(
const
VariableRef
& v);
117
MP_expression
(
MP_expression_base
* r) :
Handle
<
MP_expression_base
*>(r) {}
118
};
119
120
127
class
TerminalExpression
:
public
MP_expression_base
{
128
public
:
129
virtual
double
getValue
()
const
= 0;
130
virtual
int
getColumn
()
const
= 0;
131
virtual
int
getStage
()
const
= 0;
132
};
133
138
class
VariableRef
:
public
TerminalExpression
{
139
friend
class
MP_variable
;
140
public
:
141
int
getColumn
()
const
;
142
private
:
143
VariableRef
(
MP_variable
* v,
144
const
MP_index_exp
& i1,
145
const
MP_index_exp
& i2,
146
const
MP_index_exp
& i3,
147
const
MP_index_exp
& i4,
148
const
MP_index_exp
& i5);
149
150
double
level
()
const
;
151
152
void
insertVariables
(set<MP_variable*>& v)
const
{
153
v.insert(
V
);
154
}
155
double
getValue
()
const
{
156
return
1.0;
157
}
158
int
getStage
()
const
{
159
return
0;
160
}
161
void
generate
(
const
MP_domain
& domain,
162
vector<Constant> multiplicators,
163
MP::GenerateFunctor
& f,
164
double
m)
const
;
165
MP_variable
*
V
;
166
int
offset
;
167
const
MP_index_exp
I1
,
I2
,
I3
,
I4
,
I5
;
168
};
169
171
MP_expression
operator+
(
const
MP_expression
& e1,
const
MP_expression
& e2);
173
MP_expression
operator+
(
const
MP_expression
& e1,
const
Constant
& e2);
175
MP_expression
operator+
(
const
Constant
& e1,
const
MP_expression
& e2);
177
MP_expression
operator-
(
const
MP_expression
& e1,
const
MP_expression
& e2);
179
MP_expression
operator-
(
const
MP_expression
& e1,
const
Constant
& e2);
181
MP_expression
operator-
(
const
Constant
& e1,
const
MP_expression
& e2);
183
MP_expression
operator*
(
const
Constant
& e1,
const
MP_expression
& e2);
185
MP_expression
operator*
(
const
MP_expression
& e1,
const
Constant
& e2);
187
MP_expression
operator/
(
const
MP_expression
& e1,
const
Constant
& e2);
189
MP_expression
sum
(
const
MP_domain
& d,
const
MP_expression
& e);
190
191
}
// End of namespace flopc
192
#endif
Generated on Sat Nov 1 2014 02:49:56 for FLOPC++ by
1.8.1.2