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.