// memManager
void TString::memManager (int size)
{
if (this->getTextlaenge() < 0) { // man weiß ja nie...
if (size < 0) {
this->setTextlaenge(0);
}
if (size >= 0) {
this->setTextlaenge(size-1);
}
}
int lenOld = 0;
lenOld = this->getTextlaenge();
int benoetigteBloecke = (size/this->blockgroesse);
if (size % this->blockgroesse > 0) { // Wenn Rest
benoetigteBloecke ++;
}
int vorhandeneBloecke = getBlockZahl();
// Wenn weniger Blocke vorhanden, als benoetigt => vorhandene Bloecke, sonst benoetigte Bloecke
int zuKopierendeBloecke = (vorhandeneBloecke < benoetigteBloecke) ? vorhandeneBloecke : benoetigteBloecke;
if (benoetigteBloecke != vorhandeneBloecke) {
cout << "benoetigteBloecke != vorhandeneBloecke";
char * oldString = this->pString; //merken
cout << "oldString gemerkt" << endl;
int tmpGroesse = (size * zuKopierendeBloecke) + this->getTextlaenge();
//this->pString = new char[this->getTextlaenge() + size + 1];
this->pString = new char[tmpGroesse];
//cout << "Speichert in Groesse " << size * this->blockgroesse << " allokiert" << endl;
cout << "Speicher in Groesse " << tmpGroesse << " allokiert" << endl;
cout << "Durlaufe For-Schleife " << lenOld << " mal ..";
int i = 0;
for(i = 0; i < lenOld; i++) {
/*cout << "size: " << size << endl;
cout << "zuKopierendeBloecke: " << zuKopierendeBloecke << endl;
cout << "this->blockgroesse: " << this->blockgroesse << endl;
cout << "vorhandeneBloecke: " << vorhandeneBloecke << endl;
cout << "this->getTextlaenge(): " << this->getTextlaenge() << endl;
cout << "i: " << i << endl;*/
pString[i] = oldString[i];
}
cout << "..done" << endl;
// Ans Ende eine binaere Null setzen
cout << ".. i: " << i << endl;
if (i > 0) {
pString[i+1] = '\0';
}
cout << "Binaere Null gesetzt" << endl;
/*cout << "Setze Blockzahl auf " << benoetigteBloecke << endl;
setBlockZahl(benoetigteBloecke);*/
cout << "Setze Blockzahl auf " << this->getBlockZahl() << " plus " << benoetigteBloecke << endl;
setBlockZahl(this->getBlockZahl() + benoetigteBloecke);
}
this->setTextlaenge(this->getTextlaenge() + (size-1));
}