OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimKeywordlist.h
Go to the documentation of this file.
1 //---
2 //
3 // License: MIT
4 //
5 // Author: Ken Melero
6 //
7 // Description: This class provides capabilities for keywordlists.
8 //
9 //---
10 // $Id$
11 
12 #ifndef ossimKeywordlist_HEADER
13 #define ossimKeywordlist_HEADER 1
14 
19 #include <ossim/base/ossimIosFwd.h>
20 #include <ossim/base/ossimString.h>
22 #include <map>
23 #include <vector>
24 #include <algorithm>
25 
26 static const char DEFAULT_DELIMITER = ':';
27 
28 class ossimFilename;
29 
51  public ossimReferenced
52 {
53 public:
54 
55  typedef std::map<std::string, std::string> KeywordMap;
56 
58  ossimKeywordlist(const std::map<std::string, std::string>& keywordMap);
59  ossimKeywordlist(char delimiter = DEFAULT_DELIMITER,
60  bool expandEnvVars = false);
61 
62  ossimKeywordlist(const char* file,
63  char delimiter = DEFAULT_DELIMITER,
64  bool ignoreBinaryChars = false,
65  bool expandEnvVars = false );
66 
67  ossimKeywordlist(const ossimFilename& fileName,
68  char delimiter = DEFAULT_DELIMITER,
69  bool ignoreBinaryChars = false,
70  bool expandEnvVars = false);
71 
73 
74  static const std::string NULL_KW;
75 
80  bool addFile(const char* file);
81 
86  bool addFile(const ossimFilename& file);
87 
92  void change_delimiter(char del);
93 
94  ossimString delimiter_str() const;
95 
100  void setExpandEnvVarsFlag( bool flag );
105  bool getExpandEnvVarsFlag( void ) const;
106 
107  void add(const char* prefix,
108  const ossimKeywordlist& kwl,
109  bool overwrite=true);
110 
137  template<class CompareType>
138  bool findValue(ossimString& value, const CompareType& compare)const
139  {
140  KeywordMap::const_iterator iter = std::find_if(m_map.begin(), m_map.end(), compare);
141  bool result = (iter != m_map.end());
142  if(result) value = iter->second;
143  return result;
144  }
145 
146  std::string& operator[](const std::string& key)
147  {
148  return m_map[key];
149  }
150  std::string operator[](const std::string& key)const
151  {
152  ossimString result = find(key.c_str());
153 
154  return result.c_str();
155  }
156 
157  // Methods to add keywords to list.
158  void addPair(const std::string& key,
159  const std::string& value,
160  bool overwrite = true);
161 
162  void addPair(const std::string& prefix,
163  const std::string& key,
164  const std::string& value,
165  bool overwrite = true);
166 
172  void add(const ossimKeywordlist& kwl,
173  const char* prefix=0,
174  bool stripPrefix=true);
175 
176  void add(const char* key,
177  const char* value,
178  bool overwrite = true);
179 
180  void add(const char* prefix,
181  const char* key,
182  const char* value,
183  bool overwrite = true);
184 
185  void add(const char* key,
186  char value,
187  bool overwrite = true);
188 
189  void add(const char* prefix,
190  const char* key,
191  char value,
192  bool overwrite = true);
193 
194  void add(const char* key,
195  ossim_int16 value,
196  bool overwrite = true);
197 
198  void add(const char* prefix,
199  const char* key,
200  ossim_int16 value,
201  bool overwrite = true);
202 
203  void add(const char* key,
204  ossim_uint16 value,
205  bool overwrite = true);
206 
207  void add(const char* prefix,
208  const char* key,
209  ossim_uint16 value,
210  bool overwrite = true);
211 
212  void add(const char* key,
213  ossim_int32 value,
214  bool overwrite = true);
215 
216  void add(const char* prefix,
217  const char* key,
218  ossim_int32 value,
219  bool overwrite = true);
220 
221  void add(const char* key,
222  ossim_uint32 value,
223  bool overwrite = true);
224 
225  void add(const char* prefix,
226  const char* key,
227  ossim_uint32 value,
228  bool overwrite = true);
229 
230  void add(const char* key,
231  ossim_int64 value,
232  bool overwrite = true);
233 
234  void add(const char* prefix,
235  const char* key,
236  ossim_int64 value,
237  bool overwrite = true);
238 
239  void add(const char* key,
240  ossim_uint64 value,
241  bool overwrite = true);
242 
243  void add(const char* prefix,
244  const char* key,
245  ossim_uint64 value,
246  bool overwrite = true);
247 
262  void add(const char* key,
263  ossim_float32 value,
264  bool overwrite = true,
265  int precision = 8);
266 
281  void add(const char* prefix,
282  const char* key,
283  ossim_float32 value,
284  bool overwrite = true,
285  int precision = 8);
286 
301  void add(const char* key,
302  ossim_float64 value,
303  bool overwrite = true,
304  int precision = 15);
305 
320  void add(const char* prefix,
321  const char* key,
322  ossim_float64 value,
323  bool overwrite = true,
324  int precision = 15);
325 
334  bool hasKey( const std::string& key ) const;
335 
345  const std::string& findKey(const std::string& key) const;
346  const std::string& findKey(const std::string& prefix,
347  const std::string& key) const;
348 
349  const char* find(const char* key) const;
350  const char* find(const char* prefix,
351  const char* key) const;
352 
353  void remove(const char * key);
354  void remove(const char* prefix, const char * key);
355 
359  ossim_uint32 numberOf(const char* str) const;
360 
375  ossim_uint32 numberOf(const char* prefix, const char* key) const;
376 
386  virtual bool write(const char* file, const char* comment = 0) const;
387 
388  virtual ossimString toString()const;
389  virtual void toString(ossimString& result)const;
390 
391  virtual void writeToStream(std::ostream &out)const;
392 
398  void toXML(std::ostream &out, const std::string& rootTag="info")const;
399 
405  void toJSON(std::ostream &out, const std::string& rootTag="info")const;
406 
407  virtual std::ostream& print(std::ostream& os) const;
409  const ossimKeywordlist& kwl);
410  bool operator ==(ossimKeywordlist& kwl)const;
411  bool operator !=(ossimKeywordlist& kwl)const;
412 
417  void clear();
418 
428  void addList( const ossimKeywordlist &src, bool overwrite = true );
429 
431  virtual bool parseStream(ossim::istream& is,
432  bool ignoreBinaryChars);
433 
434  virtual bool parseStream(ossim::istream& is);
435  virtual bool parseString(const std::string& inString);
436 
455  void getSortedList(std::vector<ossimString>& prefixValues,
456  const ossimString &prefixKey)const;
462  std::vector<ossimString> findAllKeysThatContains(
463  const ossimString &searchString)const;
464 
473  void findAllKeysThatMatch( std::vector<ossimString>& result,
474  const ossimString &regularExpression ) const;
475 
481  ossim_uint32 getNumberOfKeysThatMatch(
482  const ossimString &regularExpression ) const;
483 
484  void extractKeysThatMatch(ossimKeywordlist& kwl,
485  const ossimString &regularExpression)const;
486 
487  void removeKeysThatMatch(const ossimString &regularExpression);
488 
512  std::vector<ossimString> getSubstringKeyList(const ossimString& regularExpression)const;
513  void getSubstringKeyList(std::vector<ossimString>& result,
514  const ossimString& regularExpression)const;
515 
516  ossim_uint32 getNumberOfSubstringKeys(
517  const ossimString& regularExpression)const;
518 
519  void addPrefixToAll(const ossimString& prefix);
520  void addPrefixToKeysThatMatch(const ossimString& prefix,
521  const ossimString& regularExpression);
522  void stripPrefixFromAll(const ossimString& regularExpression);
523 
527  ossim_uint32 getSize()const;
528 
529  const ossimKeywordlist::KeywordMap& getMap()const;
531 
532  ossimKeywordlist& downcaseKeywords();
533  ossimKeywordlist& upcaseKeywords();
534 
535  ossimKeywordlist& trimAllValues(const ossimString& valueToTrim= ossimString(" \t\n\r"));
536  ossimKeywordlist trimAllValues(const ossimString& valueToTrim= ossimString(" \t\n\r"))const;
537 
538 
543  bool getBoolKeywordValue(bool& rtn_val,
544  const char* keyword,
545  const char* prefix=0) const;
546 
547 protected:
549  {
550  KeywordlistParseState_OK = 0,
551 
552  // Used to say this set of token has failed the rules.
553  KeywordlistParseState_FAIL = 1,
554 
555  // Means an error occured that is a mal formed stream for Keywordlist.
556  KeywordlistParseState_BAD_STREAM = 2,
557  };
566  bool parseFile(const ossimFilename& file,
567  bool ignoreBinaryChars = false);
568 
569  bool isValidKeywordlistCharacter(ossim_uint8 c)const;
570  void skipWhitespace(ossim::istream& in)const;
571  KeywordlistParseState readComments(ossimString& sequence, ossim::istream& in)const;
572  KeywordlistParseState readPreprocDirective(ossim::istream& in);
573  KeywordlistParseState readKey(ossimString& sequence, ossim::istream& in)const;
574  KeywordlistParseState readValue(ossimString& sequence, ossim::istream& in)const;
575  KeywordlistParseState readKeyAndValuePair(ossimString& key,
576  ossimString& value, ossim::istream& in)const;
577 
578  // Method to see if keyword exists in list.
579  KeywordMap::iterator getMapEntry(const std::string& key);
580  KeywordMap::iterator getMapEntry(const ossimString& key);
581  KeywordMap::iterator getMapEntry(const char* key);
582 
583  // For toXML method lifted from oms::DataInfo.
584  bool isSpecialXmlCharacters(const ossimString& value) const;
585  bool isValidTag(const std::string& value)const;
586  void replaceSpecialCharacters(ossimString& value)const;
587 
591  bool isSame( const std::vector<ossimString>& a,
592  const std::vector<ossimString>& b ) const;
593 
596 
597  // enables preserving empty field values, multi lines, ... etc
599 
601 
602  // enables relative paths in #include directive
604 };
605 
606 #endif /* #ifndef ossimKeywordlist_HEADER */
#define OSSIMDLLEXPORT
bool operator!=(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:111
Represents serializable keyword/value map.
ossimReferenced allows for shared object ref counting if the reference count ever gets to 0 or less i...
float ossim_float32
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
unsigned short ossim_uint16
double ossim_float64
std::map< std::string, std::string > KeywordMap
std::string operator[](const std::string &key) const
unsigned long long ossim_uint64
bool findValue(ossimString &value, const CompareType &compare) const
This is a generic find method that takes a comparator type and iterates through the map executing t...
unsigned int ossim_uint32
bool operator==(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:101
std::string & operator[](const std::string &key)
short ossim_int16
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
static const std::string NULL_KW
friend OSSIMDLLEXPORT std::ostream & operator<<(std::ostream &out, const ossimErrorStatusInterface &obj)
#define OSSIM_DLL
ossimFilename m_currentlyParsing
long long ossim_int64
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
str write(os2.str().data(), os2.str().size())
unsigned char ossim_uint8
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
int ossim_int32