-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSCIndetVal.inl.h
167 lines (124 loc) · 4.47 KB
/
SCIndetVal.inl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*------------------------------------------------------------------------------+
| |
| SCL - Simulation Class Library |
| |
| (c) 1994-98 Marc Diefenbruch, Wolfgang Textor |
| University of Essen, Germany |
| |
+---------------+-------------------+---------------+-------------------+-------+
| Module | File | Created | Project | |
+---------------+-------------------+---------------+-------------------+-------+
| SCIndetVal | SCIndetVal.inl.h | 25. Apr 1996 | SCL | |
+---------------+-------------------+---------------+-------------------+-------+
| |
| Change Log |
| |
| Nr. Date Description |
| ----- -------- ------------------------------------------------------- |
| 001 |
| 000 --.--.-- Neu angelegt |
| |
+------------------------------------------------------------------------------*/
/* Lineal
000000000011111111112222222222333333333344444444445555555555666666666677777777778
012345678901234567890123456789012345678901234567890123456789012345678901234567890
*/
#ifndef __SCINDETVAL_INL__
#define __SCINDETVAL_INL__
#include "SCStack.h"
#include "SCScheduler.h"
_SCINLINE_ SCNatural SCIndetVal::NonDetChoice (const SCNatural range)
{
(void)range;
return 0;
}
_SCINLINE_ SCNatural SCIndetVal::ChooseOneTrue (const SCNatural choiceSize,
const SCNatural numOfTrues,
const SCNatural singleTrue,
const SCBoolean *choiceSet)
{
SCNatural choice;
SCNatural z_i;
switch (numOfTrues)
{
case 0:
choice = kSCDecisionNone;
break;
case 1:
choice = singleTrue + kSCDecisionBase;
break;
default:
choice = NonDetChoice (numOfTrues);
for (z_i = 0; choice != 0 && z_i < choiceSize; z_i++)
{
if (choiceSet[z_i])
choice--;
}
choice = z_i + kSCDecisionBase;
break;
}
return (choice);
}
// this method is called by SCAutomaton::Create() and SCAutomaton::Call():
_SCINLINE_ SCBoolean SCIndetVal::Create (SCProcessID offspring)
{
if (createdInstances == NULL)
{
// maxNumOfCreatedInstances should be calculated here FIXME!
assert(maxNumOfCreatedInstances > 0);
createdInstances = new SCProcessID[maxNumOfCreatedInstances];
assert(createdInstances);
numOfCreatedInstances = 0;
}
createdInstances[numOfCreatedInstances++] = offspring;
return true;
}
_SCINLINE_ SCNatural SCIndetVal::CurrentDepth (void) const
{
return currentStack->CurrentDepth();
}
_SCINLINE_ void SCIndetVal::StartMessage (void)
{
SCScheduler::outputStream << *this;
}
_SCINLINE_ void SCIndetVal::EndMessage (void)
{
SCScheduler::outputStream << *this;
}
_SCINLINE_ class SCStack * SCIndetVal::GetStack (void) const
{
return currentStack;
}
_SCINLINE_ class SCStack * SCIndetVal::GetFirstStack (void) const
{
return theFirstStack;
}
_SCINLINE_ class SCStack * SCIndetVal::GetSecondStack (void) const
{
return theSecondStack;
}
_SCINLINE_ class SCStateSpace * SCIndetVal::GetCurrentStateSpace (void) const
{
return currentStateSpace;
}
_SCINLINE_ class SCStateSpace * SCIndetVal::GetStateSpace (void) const
{
return theStateSpace;
}
_SCINLINE_ class SCStateSpace * SCIndetVal::GetCycleStateSpace (void) const
{
return theCycleStateSpace;
}
_SCINLINE_ SCErrorCode SCIndetVal::GetLastError (void) const
{
return lastError;
}
_SCINLINE_ SCNatural SCIndetVal::GetLastSuccessor (void) const
{
return lastSuccessor;
}
_SCINLINE_ class SCStackElem * SCIndetVal::GetCycleClosingElem (void) const
{
return cycleClosingElem;
}
#endif // __SCINDETVAL_INL__