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