1 //
2 // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 // ===
17 //
18 // gstrings.cpp
19 //
20
21 #include "gdef.h"
22 #include "gstrings.h"
23 #include "gstr.h"
24 #include <string>
25 #include <list>
26 #include <map>
27 #include <stdexcept>
28
StringMapReader(const G::StringMap & map_)29 G::StringMapReader::StringMapReader( const G::StringMap & map_ ) :
30 m_map(map_)
31 {
32 }
33
at(const std::string & key) const34 const std::string & G::StringMapReader::at( const std::string & key ) const
35 {
36 StringMap::const_iterator p = m_map.find( key ) ;
37 if( p == m_map.end() )
38 throw std::out_of_range(std::string()+"key ["+key+"] not found in ["+G::Str::join(keys(14U,"..."),",")+"]") ;
39 return (*p).second ;
40 }
41
at(const std::string & key,const std::string & default_) const42 const std::string & G::StringMapReader::at( const std::string & key , const std::string & default_ ) const
43 {
44 StringMap::const_iterator p = m_map.find( key ) ;
45 return p == m_map.end() ? default_ : (*p).second ;
46 }
47
keys(unsigned int limit,const char * elipsis) const48 G::Strings G::StringMapReader::keys( unsigned int limit , const char * elipsis ) const
49 {
50 Strings result ;
51 unsigned int i = 0U ;
52 StringMap::const_iterator p = m_map.begin() ;
53 for( ; p != m_map.end() && limit > 0U && i < limit ; ++p , i++ )
54 result.push_back( (*p).first ) ;
55 if( p != m_map.end() && elipsis != NULL )
56 result.push_back( elipsis ) ;
57 return result ;
58 }
59
60 /// \file gstrings.cpp
61