COIN-OR::LEMON - Graph Library

Changeset 1852:ffa7c6e96330 in lemon-0.x for lemon/bits/item_reader.h


Ignore:
Timestamp:
12/07/05 12:57:30 (18 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2420
Message:

Some bug fixes and improvments in the io classes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/bits/item_reader.h

    r1744 r1852  
    181181  public:
    182182
     183    /// \brief Constructor for InsertReader
     184    ///
     185    /// Constructor for InsertReader
     186    PushBackReader(const ItemReader& _item_reader = ItemReader())
     187      : item_reader(_item_reader) {}
     188
    183189    /// \brief Reads the values into the container from the given stream.
    184190    ///
     
    195201      }
    196202      if (!is) throw DataFormatError("PushBackReader format error");
    197       is.putback(c);
    198203    }
    199204
     
    223228
    224229  public:
     230
     231    /// \brief Constructor for InsertReader
     232    ///
     233    /// Constructor for InsertReader
     234    InsertReader(const ItemReader& _item_reader = ItemReader())
     235      : item_reader(_item_reader) {}
    225236
    226237    /// \brief Reads the values into the container from the given stream.
     
    238249      }
    239250      if (!is) throw DataFormatError("PushBackReader format error");
    240       is.putback(c);
    241251    }
    242252
     
    311321    ///
    312322    /// Reads the line from the given stream.
    313     void read(std::istream& is, Value& value) {
     323    void read(std::istream& is, Value& value) const {
    314324      if (skipSpaces) is >> std::ws;
    315325      if (!getline(is, value)) {
    316         throw DataFormatError("LineReader forma error");
     326        throw DataFormatError("LineReader format error");
    317327      }
    318328    }
    319329  private:
    320330    bool skipSpaces;
     331  };
     332
     333  /// \ingroup item_io
     334  /// \brief Reader for std::pair.
     335  ///
     336  /// Reader for std::pair.
     337  ///
     338  /// \author Balazs Dezso
     339  template <typename _Pair,
     340            typename _FirstReader =
     341            DefaultReader<typename _Pair::first_type>,
     342            typename _SecondReader =
     343            DefaultReader<typename _Pair::second_type> >
     344  class PairReader {
     345  public:
     346    typedef _Pair Value;
     347
     348    typedef _FirstReader FirstReader;
     349    typedef _SecondReader SecondReader;
     350
     351  private:
     352
     353    FirstReader first_reader;
     354    SecondReader second_reader;
     355
     356  public:
     357   
     358    /// \brief Constructor.
     359    ///
     360    /// Constructor for the PairReader.
     361    PairReader(const FirstReader& _first_reader = FirstReader(),
     362               const SecondReader& _second_reader = SecondReader())
     363      : first_reader(_first_reader), second_reader(_second_reader) {}
     364   
     365    /// \brief Reads the pair from the given stream.
     366    ///
     367    /// Reads the pair from the given stream.
     368    void read(std::istream& is, Value& value) const {
     369      char c;
     370      if (!(is >> c) || c != '(') {
     371        throw DataFormatError("PairReader format error");
     372      }
     373      first_reader.read(is, value.first);
     374      if (!(is >> c) || c != '=') {
     375        throw DataFormatError("PairReader format error");
     376      }
     377      if (!(is >> c) || c != '>') {
     378        throw DataFormatError("PairReader format error");
     379      }
     380      second_reader.read(is, value.second);
     381      if (!(is >> c) || c != ')') {
     382        throw DataFormatError("PairReader format error");
     383      }
     384    }
    321385  };
    322386
     
    390454    : public InsertReader<std::set<Item> > {};
    391455
     456  template <typename Key, typename Value>
     457  class DefaultReader<std::map<Key, Value> >
     458    : public InsertReader<std::map<Key, Value>,
     459                          DefaultReader<std::pair<Key, Value> > > {};
     460
    392461  template <typename Item>
    393462  class DefaultReader<std::multiset<Item> >
    394463    : public InsertReader<std::multiset<Item> > {};
    395464
     465  template <typename Key, typename Value>
     466  class DefaultReader<std::multimap<Key, Value> >
     467    : public InsertReader<std::multimap<Key, Value>,
     468                          DefaultReader<std::pair<Key, Value> > > {};
     469
     470  template <typename First, typename Second>
     471  class DefaultReader<std::pair<First, Second> >
     472    : public PairReader<std::pair<First, Second> > {};
     473
    396474  /// \ingroup item_io
    397475  ///
Note: See TracChangeset for help on using the changeset viewer.