1 /**********************************************************
2 * Version $Id$
3 *********************************************************/
4
5 //#include <..\stdafx.h>
6
7 #include "auswert_if.h"
8 #include <assert.h>
9
10
11
auswert_bool_IFVar(BBBaumInteger * IF1,BBBaumInteger * IF2,BBBool::T_booloperator b)12 bool auswert_bool_IFVar(BBBaumInteger *IF1, BBBaumInteger *IF2, BBBool::T_booloperator b)
13 {
14 switch (b)
15 {
16 case BBBool::Gleich:
17 return auswert_float(*IF1) == auswert_float(*IF2);
18 case BBBool::Ungleich:
19 return auswert_float(*IF1) != auswert_float(*IF2);
20 case BBBool::Kleiner:
21 return auswert_float(*IF1) < auswert_float(*IF2);
22 case BBBool::Groesser:
23 return auswert_float(*IF1) > auswert_float(*IF2);
24 case BBBool::KleinerG:
25 return auswert_float(*IF1) <= auswert_float(*IF2);
26 case BBBool::GroesserG:
27 return auswert_float(*IF1) >= auswert_float(*IF2);
28 }
29 return false;
30 }
31
auswert_bool_PVar(BBBaumMatrixPoint * P1,BBBaumMatrixPoint * P2,BBBool::T_booloperator b)32 bool auswert_bool_PVar(BBBaumMatrixPoint *P1, BBBaumMatrixPoint *P2, BBBool::T_booloperator b)
33 {
34 T_Point v1, v2;
35 double f;
36 int ret1 = auswert_point(*P1, v1, f);
37 int ret2 = auswert_point(*P2, v2, f);
38 assert(ret1 && ret2);
39
40 switch (b)
41 {
42 case BBBool::Gleich:
43 return (v1.x == v2.x && v1.y == v2.y);
44 case BBBool::Ungleich:
45 return (v1.x != v2.x || v1.y != v2.y);
46 case BBBool::Kleiner:
47 return (v1.x < v2.x);
48 case BBBool::Groesser:
49 return (v1.x > v2.x);
50 case BBBool::KleinerG:
51 return (v1.x <= v2.x);
52 case BBBool::GroesserG:
53 return (v1.x >= v2.x);
54 }
55 return false;
56 }
57
auswert_bool_MVar(BBBaumMatrixPoint * M1,BBBaumMatrixPoint * M2,BBBool::T_booloperator b)58 bool auswert_bool_MVar(BBBaumMatrixPoint *M1, BBBaumMatrixPoint *M2, BBBool::T_booloperator b)
59 {
60 GridWerte v1, v2;
61 double f;
62 int ret1 = auswert_matrix(*M1, v1, f);
63 int ret2 = auswert_matrix(*M2, v2, f);
64 assert(ret1 && ret2);
65
66 switch (b)
67 {
68 case BBBool::Gleich:
69 return (v1.xanz == v2.xanz && v1.yanz == v2.yanz);
70 case BBBool::Ungleich:
71 return (v1.xanz != v2.xanz || v1.yanz != v2.yanz);
72 case BBBool::Kleiner:
73 return (v1.xanz < v2.xanz);
74 case BBBool::Groesser:
75 return (v1.xanz > v2.xanz);
76 case BBBool::KleinerG:
77 return (v1.xanz <= v2.xanz);
78 case BBBool::GroesserG:
79 return (v1.xanz >= v2.xanz);
80 }
81 return false;
82 }
83
auswert_bool(BBBool & b)84 bool auswert_bool(BBBool& b)
85 {
86 assert(b.type != BBBool::Nothing);
87
88 switch(b.type)
89 {
90 case BBBool::IFVar:
91 return auswert_bool_IFVar(b.BoolVar1.IF, b.BoolVar2.IF, b.BoolOp);
92 case BBBool::PVar:
93 return auswert_bool_PVar(b.BoolVar1.MP, b.BoolVar2.MP, b.BoolOp);
94 case BBBool::MVar:
95 return auswert_bool_MVar(b.BoolVar1.MP, b.BoolVar2.MP, b.BoolOp);
96 }
97 return false;
98 }
99
auswert_bedingung(BBBedingung * b)100 bool auswert_bedingung(BBBedingung *b)
101 {
102 assert(b->type != BBBedingung::Nothing);
103 int ret1, ret2;
104
105 switch (b->type)
106 {
107 case BBBedingung::Bool:
108 return auswert_bool(*(b->BedingungVar.BoolVar.b));
109 case BBBedingung::Und:
110 return auswert_bedingung(b->BedingungVar.BoolBiOp.b1) &&
111 auswert_bedingung(b->BedingungVar.BoolBiOp.b2);
112 case BBBedingung::Oder:
113 return auswert_bedingung(b->BedingungVar.BoolBiOp.b1) ||
114 auswert_bedingung(b->BedingungVar.BoolBiOp.b2);
115 case BBBedingung::XOder:
116 ret1 = auswert_bedingung(b->BedingungVar.BoolBiOp.b1);
117 ret2 = auswert_bedingung(b->BedingungVar.BoolBiOp.b2);
118 return ((ret1 && !ret2) || (!ret1 && ret2));
119 case BBBedingung::Not:
120 return ! auswert_bedingung(b->BedingungVar.BoolUniOp.b);
121 }
122 assert(false);
123 return false;
124 }
125
ausfueren_bedingung(BBIf & b)126 void ausfueren_bedingung(BBIf& b)
127 {
128
129 if (auswert_bedingung(b.b))
130 {
131 ausfuehren_anweisung(b.z);
132 }
133 else
134 {
135 if (b.isElse)
136 ausfuehren_anweisung(b.zelse);
137 }
138 }
139