PDA

Vollständige Version anzeigen : Array-/Puffereinträge werden überschrieben...


fiatlux
05.07.2004, 16:07
Hallo liebes Forum,

ich bin da mal wieder an einem Punkt, wo ich zweifele, ob ich überhaupt was vom Programmieren verstehe...

Vorab: Über die serielle Schnittstelle empfange ich immer nacheinander 6 verschiedene Datensätze von einem externen Gerät, die ich aufsplitte und in Klassen "stecke". Dann gibt es eine "Oberklasse", die je eine Instanz jeder der 6 "Unterklassen" enthält.

Ich habe mir eine Klasse Buf geschrieben, die einen Ringpuffer (FIFO) darstellen soll. In diesem Ringpuffer möchte ich 50 Objekte der Oberklasse speichern, und zwar kommen die Daten im Sekundentakt, ich möchte aber nur jede Minute einen neuen Datensatz anhängen. Ich schreibe also den ersten kommenden Wust an Daten in meinen Ringpuffer, warte ab, bis der nächste Wust an Daten vollständig ist und vergleiche dann die Zeit (bzw die Minuten) - ist eine Minute um, soll der Datensatz in den Ringpuffer gehängt werden, sonst nicht. In der Theorie alles ganz gut und schön, aber...
Immer wenn ich einen neuen Datensatz vollständig habe, überschreibt der den/die bereits im Ringpuffer befindlichen - also wenn ich ohne die Abfrage, ob die Minuten sich erhöht haben, einfach jeden Datensatz in den Puffer reinhänge, habe ich am Ende 50mal dasselbe drin stehen, sehr lustig...

Ich ahne, dass es bestimmt irgendein kleines Zauberwort bzw. Zauberzeile gibt, die ich nicht kenne oder die ich wieder vergessen habe (bin nicht wirklich geübt in C), die meinem Programm dieses Überschreiben untersagt... oder??!?

Ich hoffe, ich habe das Problem einigermaßen verständlich dargestellt, und hoffe auf Eure Hilfe...

Vielen Dank und viele Grüße,

fiatlux

//Klasse Buf (Ringpuffer)
# define BUFSIZE 50
class Buf
{
public:
Buf();
virtual ~Buf();
bool Append(void* newthing);
void *First(void);
void *Last(void);
int Length(void) const;
int Full(void) const;
int Empty(void) const;


private:
void *daten[BUFSIZE];
int bufapp;
int bufget;
int bufcount;

};

inline int Buf::Length(void) const { return bufcount; }
inline int Buf::Full(void) const { return bufcount == BUFSIZE; }
inline int Buf::Empty(void) const { return bufcount == 0; }
void *entnehme_item(Buf puffer);

bool Buf::Append(void *newthing)
{
if (bufcount<BUFSIZE)
{
printf("%d", bufapp);
daten[bufapp] = newthing;
printf ("\n\n\n\n Es wurde das %d te Data eingefügt!\n\n\n\n",bufapp);
bufapp++;
if(bufapp == BUFSIZE)
bufapp = 0;
bufcount++;
return (true);
}
else
return (false);
}

void *Buf::First(void)
{
void* temp = daten[bufget];
bufget++;
if(bufget == BUFSIZE)
bufget = 0;
bufcount--;
return temp;
}

void *Buf::Last(void)
{
void *temp=NULL;
if (bufapp>0)
{
temp = daten[bufapp-1];
return temp;
}
else
return temp;
}

/////////////////////////////////////////////////////////////////////////////////////////////
// das ist ein kleiner Ausschnitt aus dem main, das soll ablaufen, wenn alle "Unterklassen" mit Daten gefüllt sind
///////////////////////////////////////////////////////////////////////////////////////////////

Buf ringpuffer;
Data *newitem=NULL;
Data *lastitem=NULL;
Data *appitem=NULL; // appitem war schon ein verzeifelter Versuch, durch sinnfreies hin- und hergeschachtele den Rechner zu verwirren...
int lasttime;
int newtime;
char lastmin[5];
char newmin[5];
//bgga usw. sind Schalter, die nach Füllung der Objekte auf true gesetzt werden, sonst default-mäßig auf false sind

//wenn alle "Unterklassen" mit Daten gefüllt sind:
if (bgga==true && bgsa==true && bgsv==true && brmc==true && brme==true && brmm==true)
{
appitem=newitem;
int len=ringpuffer.Length();
if (len>0)
{
lastitem=new Data();
lastitem=(Data*) ringpuffer.Last();
midstr(lastmin, lastitem->gga.getggautc(), 2, 2);//schneidet die Minuten aus der Variablen aus
midstr(newmin, newitem->gga.getggautc(), 2, 2);
newitem=NULL;
newitem=new Data();

lasttime=atoi(lastmin);
newtime=atoi(newmin);

printf ("Letzter Eintrag: %d \n neues Datum: %d \n\n", lasttime, newtime);

switch(lasttime)
{
case(59): //im Fall, dass Stunde überschritten wurde
if (newtime==0)
{
if(ringpuffer.Append(appitem))
printf("\n\n\nAnfuegen hat geklappt!\n\n\n");
else
printf("\n\n\nAnfuegen hat nicht geklappt!\n\n\n");
}
default:
if (newtime==lasttime+1)
{
if(ringpuffer.Append(appitem))
printf("\n\n\nAnfuegen hat geklappt!\n\n\n");
else
printf("\n\n\nAnfuegen hat nicht geklappt!\n\n\n");
}
} // Ende switch

}// Ende if len>0
else //wenn noch kein Data in ringpuffer eingetragen wurde - dann muss das erste ankommende auf jeden Fall eingetragen werden
{
if(ringpuffer.Append(appitem))
printf("\n\n\nAnfuegen hat geklappt!\n\n\n");
else
printf("\n\n\nAnfuegen hat nicht geklappt!\n\n\n");
appitem=NULL;

newitem=NULL;
newitem=new Data();

} // wenn vollständiges Data irgendwie abgearbeitet wurde - alles bereit machen für die Aufnahme neuer Daten

bgga=false;
bgsa=false;
bgsv=false;
brmc=false;
brme=false;
brmm=false;
}// Ende wenn alle Unterklassen gefüllt sind

Joachim Hofmann
16.08.2004, 17:04
Hallo,

ich habe das jetzt nicht wirklich gelesen, mir fällt nur auf daß eine schließende runde Klammer (Zeile 31 nach bufcount) fehlt.
Ich habe sie einfach mal eingefügt und übersichtlicher formatiert.


<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet">

<font color="#ff00ff">1</font> <span style="background-color: #f2f2f2"><font color="#008000">//Klasse Buf (Ringpuffer) </font></span>
<font color="#ff00ff">2</font> # define BUFSIZE <font color="#ff00ff">50</font>
<font color="#ff00ff">3</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>class</b></font></span> Buf
<font color="#ff00ff">4</font> {
<font color="#ff00ff">5</font> <font color="#804040"><b>public</b></font>:
<font color="#ff00ff">6</font> Buf();
<font color="#ff00ff">7</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>virtual</b></font></span> ~Buf();
<font color="#ff00ff">8</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>bool</b></font></span> Append(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>* newthing);
<font color="#ff00ff">9</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *First(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>);
<font color="#ff00ff">10</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *Last(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>);
<font color="#ff00ff">11</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Length(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span>;
<font color="#ff00ff">12</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Full(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span>;
<font color="#ff00ff">13</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Empty(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span>;
<font color="#ff00ff">14</font>
<font color="#ff00ff">15</font>
<font color="#ff00ff">16</font> <font color="#804040"><b>private</b></font>:
<font color="#ff00ff">17</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *daten[BUFSIZE];
<font color="#ff00ff">18</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> bufapp;
<font color="#ff00ff">19</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> bufget;
<font color="#ff00ff">20</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> bufcount;
<font color="#ff00ff">21</font>
<font color="#ff00ff">22</font> };
<font color="#ff00ff">23</font>
<font color="#ff00ff">24</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>inline</b></font></span> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Buf::Length(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span> { <font color="#804040"><b>return</b></font> bufcount; }
<font color="#ff00ff">25</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>inline</b></font></span> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Buf::Full(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span> { <font color="#804040"><b>return</b></font> bufcount == BUFSIZE; }
<font color="#ff00ff">26</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>inline</b></font></span> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> Buf::Empty(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>) <span style="background-color: #f2f2f2"><font color="#0000ff"><b>const</b></font></span> { <font color="#804040"><b>return</b></font> bufcount == <font color="#ff00ff">0</font>; }
<font color="#ff00ff">27</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *entnehme_item(Buf puffer);
<font color="#ff00ff">28</font>
<font color="#ff00ff">29</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>bool</b></font></span> Buf::Append(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *newthing)
<font color="#ff00ff">30</font> {
<font color="#ff00ff">31</font> <font color="#804040"><b>if</b></font> (bufcount) {
<font color="#ff00ff">32</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">%d</font><font color="#ff00ff">&quot;</font>, bufapp);
<font color="#ff00ff">33</font> daten[bufapp] = newthing;
<font color="#ff00ff">34</font> printf (<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n\n</font><font color="#ff00ff"> Es wurde das </font><font color="#6a5acd">%d</font><font color="#ff00ff"> te Data eingefügt!</font><font color="#6a5acd">\n\n\n\n</font><font color="#ff00ff">&quot;</font>,bufapp);
<font color="#ff00ff">35</font> bufapp++;
<font color="#ff00ff">36</font> <font color="#804040"><b>if</b></font>(bufapp == BUFSIZE)
<font color="#ff00ff">37</font> bufapp = <font color="#ff00ff">0</font>;
<font color="#ff00ff">38</font> bufcount++;
<font color="#ff00ff">39</font> <font color="#804040"><b>return</b></font> (<font color="#ff00ff">true</font>);
<font color="#ff00ff">40</font> }
<font color="#ff00ff">41</font> <font color="#804040"><b>else</b></font>
<font color="#ff00ff">42</font> <font color="#804040"><b>return</b></font> (<font color="#ff00ff">false</font>);
<font color="#ff00ff">43</font> }
<font color="#ff00ff">44</font>
<font color="#ff00ff">45</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *Buf::First(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>)
<font color="#ff00ff">46</font> {
<font color="#ff00ff">47</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>* temp = daten[bufget];
<font color="#ff00ff">48</font> bufget++;
<font color="#ff00ff">49</font> <font color="#804040"><b>if</b></font>(bufget == BUFSIZE)
<font color="#ff00ff">50</font> bufget = <font color="#ff00ff">0</font>;
<font color="#ff00ff">51</font> bufcount--;
<font color="#ff00ff">52</font> <font color="#804040"><b>return</b></font> temp;
<font color="#ff00ff">53</font> }
<font color="#ff00ff">54</font>
<font color="#ff00ff">55</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *Buf::Last(<span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span>)
<font color="#ff00ff">56</font> {
<font color="#ff00ff">57</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>void</b></font></span> *temp=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">58</font> <font color="#804040"><b>if</b></font> (bufapp&gt;<font color="#ff00ff">0</font>)
<font color="#ff00ff">59</font> {
<font color="#ff00ff">60</font> temp = daten[bufapp-<font color="#ff00ff">1</font>];
<font color="#ff00ff">61</font> <font color="#804040"><b>return</b></font> temp;
<font color="#ff00ff">62</font> }
<font color="#ff00ff">63</font> <font color="#804040"><b>else</b></font>
<font color="#ff00ff">64</font> <font color="#804040"><b>return</b></font> temp;
<font color="#ff00ff">65</font> }
<font color="#ff00ff">66</font>
<font color="#ff00ff">67</font> <span style="background-color: #f2f2f2"><font color="#008000">/////////////////////////////////////////////////////////////////////////////////////////////</font></span>
<font color="#ff00ff">68</font> <span style="background-color: #f2f2f2"><font color="#008000">// das ist ein kleiner Ausschnitt aus dem main, das soll ablaufen, wenn alle &quot;Unterklassen&quot; mit Daten gefüllt sind </font></span>
<font color="#ff00ff">69</font> <span style="background-color: #f2f2f2"><font color="#008000">///////////////////////////////////////////////////////////////////////////////////////////////</font></span>
<font color="#ff00ff">70</font>
<font color="#ff00ff">71</font> Buf ringpuffer;
<font color="#ff00ff">72</font> Data *newitem=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">73</font> Data *lastitem=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">74</font> Data *appitem=<font color="#ff00ff">NULL</font>; <span style="background-color: #f2f2f2"><font color="#008000">// appitem war schon ein verzeifelter Versuch, durch sinnfreies hin- und hergeschachtele den Rechner zu verwirren...</font></span>
<font color="#ff00ff">75</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> lasttime;
<font color="#ff00ff">76</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> newtime;
<font color="#ff00ff">77</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>char</b></font></span> lastmin[<font color="#ff00ff">5</font>];
<font color="#ff00ff">78</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>char</b></font></span> newmin[<font color="#ff00ff">5</font>];
<font color="#ff00ff">79</font> <span style="background-color: #f2f2f2"><font color="#008000">//bgga usw. sind Schalter, die nach Füllung der Objekte auf true gesetzt werden, sonst default-mäßig auf false sind</font></span>
<font color="#ff00ff">80</font>
<font color="#ff00ff">81</font> <span style="background-color: #f2f2f2"><font color="#008000">//wenn alle &quot;Unterklassen&quot; mit Daten gefüllt sind: </font></span>
<font color="#ff00ff">82</font> <font color="#804040"><b>if</b></font> (bgga==<font color="#ff00ff">true</font> &amp;&amp; bgsa==<font color="#ff00ff">true</font> &amp;&amp; bgsv==<font color="#ff00ff">true</font> &amp;&amp; brmc==<font color="#ff00ff">true</font> &amp;&amp; brme==<font color="#ff00ff">true</font> &amp;&amp; brmm==<font color="#ff00ff">true</font>)
<font color="#ff00ff">83</font> {
<font color="#ff00ff">84</font> appitem=newitem;
<font color="#ff00ff">85</font> <span style="background-color: #f2f2f2"><font color="#0000ff"><b>int</b></font></span> len=ringpuffer.Length();
<font color="#ff00ff">86</font> <font color="#804040"><b>if</b></font> (len&gt;<font color="#ff00ff">0</font>)
<font color="#ff00ff">87</font> {
<font color="#ff00ff">88</font> lastitem=<font color="#804040"><b>new</b></font> Data();
<font color="#ff00ff">89</font> lastitem=(Data*) ringpuffer.Last();
<font color="#ff00ff">90</font> midstr(lastmin, lastitem-&gt;gga.getggautc(), <font color="#ff00ff">2</font>, <font color="#ff00ff">2</font>);<span style="background-color: #f2f2f2"><font color="#008000">//schneidet die Minuten aus der Variablen aus </font></span>
<font color="#ff00ff">91</font> midstr(newmin, newitem-&gt;gga.getggautc(), <font color="#ff00ff">2</font>, <font color="#ff00ff">2</font>);
<font color="#ff00ff">92</font> newitem=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">93</font> newitem=<font color="#804040"><b>new</b></font> Data();
<font color="#ff00ff">94</font>
<font color="#ff00ff">95</font> lasttime=atoi(lastmin);
<font color="#ff00ff">96</font> newtime=atoi(newmin);
<font color="#ff00ff">97</font>
<font color="#ff00ff">98</font> printf (<font color="#ff00ff">&quot;Letzter Eintrag: </font><font color="#6a5acd">%d</font><font color="#ff00ff"> </font><font color="#6a5acd">\n</font><font color="#ff00ff"> neues Datum: </font><font color="#6a5acd">%d</font><font color="#ff00ff"> </font><font color="#6a5acd">\n\n</font><font color="#ff00ff">&quot;</font>, lasttime, newtime);
<font color="#ff00ff">99</font>
<font color="#ff00ff">100</font> <font color="#804040"><b>switch</b></font>(lasttime)
<font color="#ff00ff">101</font> {
<font color="#ff00ff">102</font> <font color="#804040"><b>case</b></font>(<font color="#ff00ff">59</font>): <span style="background-color: #f2f2f2"><font color="#008000">//im Fall, dass Stunde überschritten wurde </font></span>
<font color="#ff00ff">103</font> <font color="#804040"><b>if</b></font> (newtime==<font color="#ff00ff">0</font>)
<font color="#ff00ff">104</font> {
<font color="#ff00ff">105</font> <font color="#804040"><b>if</b></font>(ringpuffer.Append(appitem))
<font color="#ff00ff">106</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">107</font> <font color="#804040"><b>else</b></font>
<font color="#ff00ff">108</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat nicht geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">109</font> }
<font color="#ff00ff">110</font> <font color="#804040"><b>default</b></font>:
<font color="#ff00ff">111</font> <font color="#804040"><b>if</b></font> (newtime==lasttime+<font color="#ff00ff">1</font>)
<font color="#ff00ff">112</font> {
<font color="#ff00ff">113</font> <font color="#804040"><b>if</b></font>(ringpuffer.Append(appitem))
<font color="#ff00ff">114</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">115</font> <font color="#804040"><b>else</b></font>
<font color="#ff00ff">116</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat nicht geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">117</font> }
<font color="#ff00ff">118</font> } <span style="background-color: #f2f2f2"><font color="#008000">// Ende switch </font></span>
<font color="#ff00ff">119</font>
<font color="#ff00ff">120</font> }<span style="background-color: #f2f2f2"><font color="#008000">// Ende if len&gt;0 </font></span>
<font color="#ff00ff">121</font> <font color="#804040"><b>else</b></font> <span style="background-color: #f2f2f2"><font color="#008000">//wenn noch kein Data in ringpuffer eingetragen wurde - dann muss das erste ankommende auf jeden Fall eingetragen werden </font></span>
<font color="#ff00ff">122</font> {
<font color="#ff00ff">123</font> <font color="#804040"><b>if</b></font>(ringpuffer.Append(appitem))
<font color="#ff00ff">124</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">125</font> <font color="#804040"><b>else</b></font>
<font color="#ff00ff">126</font> printf(<font color="#ff00ff">&quot;</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">Anfuegen hat nicht geklappt!</font><font color="#6a5acd">\n\n\n</font><font color="#ff00ff">&quot;</font>);
<font color="#ff00ff">127</font> appitem=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">128</font>
<font color="#ff00ff">129</font> newitem=<font color="#ff00ff">NULL</font>;
<font color="#ff00ff">130</font> newitem=<font color="#804040"><b>new</b></font> Data();
<font color="#ff00ff">131</font>
<font color="#ff00ff">132</font> } <span style="background-color: #f2f2f2"><font color="#008000">// wenn vollständiges Data irgendwie abgearbeitet wurde - alles bereit machen für die Aufnahme neuer Daten </font></span>
<font color="#ff00ff">133</font>
<font color="#ff00ff">134</font> bgga=<font color="#ff00ff">false</font>;
<font color="#ff00ff">135</font> bgsa=<font color="#ff00ff">false</font>;
<font color="#ff00ff">136</font> bgsv=<font color="#ff00ff">false</font>;
<font color="#ff00ff">137</font> brmc=<font color="#ff00ff">false</font>;
<font color="#ff00ff">138</font> brme=<font color="#ff00ff">false</font>;
<font color="#ff00ff">139</font> brmm=<font color="#ff00ff">false</font>;
<font color="#ff00ff">140</font> }<span style="background-color: #f2f2f2"><font color="#008000">// Ende wenn alle Unterklassen gefüllt sind</font></span>

</div>