if you have a nuclear power plant and wanna compute small magic squares, then let's do it
4 /// Beolvaso osztaly terve:
6 // beolvaso es wrappelo bazis osztaly
9 virtual void read(typename Map::Key& key, istream& is) = 0;
12 // a default beolvaso osztaly egy maphez
13 // elboldogul olyan mappel is, amelyben valamilyen specialis tipus van
14 template <typename _Map>
15 class DefaultReader : public MapReader {
19 DefaultReader(Map& _map) : map(_map) {}
21 virtual void read(typename Map::Key& key, istream& is) {
22 typename Map::Value val;
30 // egy adott tipusu elemet beolvas, de nem irja mapbe
31 template <typename _Type>
32 class SkipReader : public MapReader {
35 virtual void read(typename Map::Key&, istream& is) {
41 // majd olyan stringeket lehet olvasni, ami idezojelek kozott van
42 template <typename _Map>
43 class QuotedStringReader {
47 QuotedStringReader(Map& _map) : map(_map) {}
49 virtual void read(typename Map::Key&, istream& is) {
58 template <typename _Graph, template <typename> class _SkipReader = SkipReader<std::string> >
61 GraphReader(istream& _is) : is(_is) {}
63 template <typename _Map, typename _Reader = DefaultReader<_Map> >
64 void readMap(std::string& name, _Map& _map) {
65 readers.push_back(_Reader(_map));
68 template <_Type, typename _Reader = SkipReader<_Map> >
69 void skipMap(std::string& name) {
70 readers.push_back(_Reader());
77 for (int i = 0; i < index.size(); ++i) {
79 readers[index[i]].read(item, is);
81 _SkipReader().read(item, is);
90 vector<MapReader> readers;
93 // Ennek az implementacionak az elonye:
94 // - altalanosabban mukodik a beolvasas
95 // - konnyebb specialis beolvasasokat megvalositani
96 // - ugyanolyan tipusu maphez ket kulonbozo beolvasasi modszert is alkalmazhatunk
97 // - Megengedi, whitespace-t tartalmazo stringek beolvasasat is (?)
100 // - Ha whitespace-t hasznalunk egy mapben, de nem olvassuk ki, akkor meg kell
101 // hivni a skipMap fuggvenyt az aktualis tipussal /a ws-eket ezt ellenjavalhatjuk a doksiban/
103 // Fejlesztesi lehetoseg:
104 // A GraphReader osztalynak nem a SkipReader lenne a parametere, hanem a kovetkezo tipusu osztaly:
106 class TypeReaderTraits {
108 class DefaultSkipReader {
112 template <typename Map>
117 template <typename Type>
123 // Ezt le lehetne cserelni peldaul DelimetedReaderTraits-re cserelni, amivel be lehetne spacekkel, vagy
124 // mas elvalasztojelekkel generalt file-t olvasni.
127 // Ugy ertelmeztem, hogy fontos az hogy kozos beolvaso interface legyen a kulonbozo
128 // tipusu beolvasasokhoz/file, adatbazis.../.
129 // Szerintem ez annyira nem fontos, mivel sem szarmaztatott viszonyban nem allnak
130 // a beolvaso interfacek, es annak sem latom ertelmet, hogy template parameter legyen
131 // a beolvaso osztaly.
132 // Ezert szerintem nem kell kozos interfacce!
134 // Azonban celszeru kozel azonos szintaktikat kialakitani a beolvasokhoz,
135 // hogy egyszeru legyen hasznalni.