@@ -20,16 +20,18 @@ Ugyanakkor a hagyományos "pooling" mintát kiterjesztjük további funkciókkal
...
@@ -20,16 +20,18 @@ Ugyanakkor a hagyományos "pooling" mintát kiterjesztjük további funkciókkal
Az első feladat egy `RString` nevű osztály elkészítése. Az osztály megvalósítandó metódusait az `rstring.h` fájl tartalmazza. AZ `RString` osztály szabályos `\0`-val lezárt karakterláncokat reprezentál, ugyanakkor a mögöttes karaktertömb kapacitása szabadon megadható.
Az első feladat egy `RString` nevű osztály elkészítése. Az osztály megvalósítandó metódusait az `rstring.h` fájl tartalmazza. AZ `RString` osztály szabályos `\0`-val lezárt karakterláncokat reprezentál, ugyanakkor a mögöttes karaktertömb kapacitása szabadon megadható.
A `RString` osztály fenti publikus metódusai tovább nem bővíthetőek, ugyanakkor tetszőleges privát adattaggal/metódussal bővíthető. Természetesen gondoskodni kell a megfelelő dinamikus memóriakazelésről.
A `RString` osztály a header fájlban megadott publikus metódusai tovább nem bővíthetőek, ugyanakkor tetszőleges privát adattaggal/metódussal bővíthető. Természetesen gondoskodni kell a megfelelő dinamikus memóriakazelésről. (itt csak elemi memóriakezelés használható)
## StringPool interfész
## StringPool interfész
A `pool.h`-ban az osztályhoz készített kommentezést követve implementáld a StringPool-t! Az osztály megvalósítása során törekedj az egységbezárásra, a hatékony megvalósításra, az osztály publikus interfésze nem bővíthető és nem is módosítható.
A `pool.h`-ban az osztályhoz készített kommentezést követve implementáld a StringPool-t! Az osztály megvalósítása során törekedj az egységbezárásra, a hatékony megvalósításra, az osztály publikus interfésze nem bővíthető és nem is módosítható.
A két `acquire` függvénynél azt a szabad RString objektumot kell visszaadni, ami maximális kihasználtságú, azaz:
A két `acquire` függvénynél azt a szabad `RString` objektumot kell visszaadni, ami maximális kihasználtságú, azaz:
-`acquire(size_t cap)` esetén a kért kapacitás (cap) és a visszaadott RString objektum kapacitásának (str_cap) hányadosa maximális: 0 < max(cap/str_cap) <= 1
-`acquire(size_t cap)` esetén a kért kapacitás (cap) és a visszaadott RString objektum kapacitásának (str_cap) hányadosa maximális: 0 < max(cap/str_cap) <= 1
-`acquire(const char* str)` esetén a kapott string valós méretének (len+1) és a visszaadott RString objektum kapacitásának (str_cap) hányadosa maximális: 0 < max((len+1)/str_cap) <= 1
-`acquire(const char* str)` esetén a kapott string valós méretének (len+1) és a visszaadott RString objektum kapacitásának (str_cap) hányadosa maximális: 0 < max((len+1)/str_cap) <= 1
*Ha több, azonos kihasználtságú elem is megadható, akkor mindegy melyiket adja vissza. Tanács: érdemes kapacitás szerint rendezetten tárolni az `RString` objektumokat, emiatt hasznos listát használni. (akár STL is)*
## Tiltott elemek
## Tiltott elemek
Az `RString` implementálásakor semmilyen STL tároló nem használható. A megoldásnál elemi dinamikus memóriakezelést kell alkalmazni. Ugyanakkor a `StringPool`-nál már használható valamilyen STL vektor vagy lista. Ezt a JPorta egyszerű szövegvizsgálattal ellenőrzi!
Az `RString` implementálásakor semmilyen STL tároló nem használható. A megoldásnál elemi dinamikus memóriakezelést kell alkalmazni. Ugyanakkor a `StringPool`-nál már használható valamilyen STL vektor vagy lista. Ezt a JPorta egyszerű szövegvizsgálattal ellenőrzi!