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