Ignore:
Timestamp:
Apr 24, 2010, 6:36:59 PM (11 years ago)
Author:
Peter Johansson
Message:

update to latest yat

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/yat/utility.h

    r1039 r1058  
    22#define _theplu_yat_utility_utility_
    33
    4 // $Id: utility.h 2210 2010-03-05 22:59:01Z peter $
     4// $Id: utility.h 2248 2010-04-22 00:57:13Z peter $
    55
    66/*
     
    149149
    150150     \note Requirement on T: utility::convert<T> must be supported
     151     (from yat 0.7 T=string is also supported)
    151152
    152153     \since New in yat 0.6
     
    173174     
    174175     \note Requirement on T: utility::convert<T> must be supported
     176     (from yat 0.7 T=string is also supported)
    175177
    176178     \since New in yat 0.6
     
    179181  void load(std::istream& is, std::vector<T>& vec, char sep='\0');
    180182 
     183// private namespace
     184namespace detail {
     185  /**
     186     Functor used in load function
     187   */
     188  template<typename T>
     189  struct VectorPusher
     190  {
     191    /**
     192       convert element to T and push on vec's back
     193
     194       \internal
     195     */
     196    void operator()(const std::string& element, std::vector<T>& vec)
     197    {
     198      if (!element.size())
     199        vec.push_back(std::numeric_limits<T>::quiet_NaN());
     200      else {
     201        vec.push_back(theplu::yat::utility::convert<T>(element));
     202      }
     203    }
     204  };
     205
     206  /**
     207     specialization for string
     208
     209     \internal
     210   */
     211  template<>
     212  struct VectorPusher<std::string>
     213  {
     214    /**
     215       push element on vec's back
     216     */
     217    void operator()(const std::string& element, std::vector<std::string>& vec)
     218    {
     219      vec.push_back(element);
     220    }
     221  };
     222
     223} // end of namespace detail
     224
     225
    181226  // template implementations
    182227
     
    287332  void load(std::istream& is, std::vector<T>& vec, char sep='\0')
    288333  {
     334    detail::VectorPusher<T> pusher;
    289335    std::string element;
    290336    bool ok=true;
    291     while(ok) {
     337    while(true) {
    292338      if(sep=='\0')
    293339        ok=(is>>element);
     
    297343        break;
    298344     
    299       if (!element.size())
    300         vec.push_back(std::numeric_limits<T>::quiet_NaN());
    301       else {
    302         vec.push_back(convert<T>(element));
    303       }
     345      pusher(element, vec);
    304346    }
    305347  }           
Note: See TracChangeset for help on using the changeset viewer.