VideoTools
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
gstrings.cpp
Go to the documentation of this file.
1 //
2 // Copyright (C) 2017 Graeme Walker
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 
30  m_map(map_)
31 {
32 }
33 
34 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 
42 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 
48 G::StringArray G::StringMapReader::keys( unsigned int limit , const char * elipsis ) const
49 {
50  StringArray result ;
51  result.reserve( limit < m_map.size() ? limit : m_map.size() ) ;
52  unsigned int i = 0U ;
53  StringMap::const_iterator p = m_map.begin() ;
54  for( ; p != m_map.end() && limit > 0U && i < limit ; ++p , i++ )
55  result.push_back( (*p).first ) ;
56  if( p != m_map.end() && elipsis != nullptr )
57  result.push_back( elipsis ) ;
58  return result ;
59 }
60 
61 /// \file gstrings.cpp
StringMapReader(const StringMap &map_)
Implicit constructor.
Definition: gstrings.cpp:29
std::vector< std::string > StringArray
A std::vector of std::strings.
Definition: gstrings.h:33
const std::string & at(const std::string &key) const
Returns the value from the map, or throws.
Definition: gstrings.cpp:34
StringArray keys(unsigned int limit=0U, const char *elipsis=nullptr) const
Returns a list of the keys in the map (optionally up to some limit).
Definition: gstrings.cpp:48
std::map< std::string, std::string > StringMap
A std::map of std::strings.
Definition: gstrings.h:34
static std::string join(const std::string &sep, const StringArray &strings)
Concatenates an array of strings.
Definition: gstr.cpp:972