BALL  1.5.0
INIFile.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 // $Id: INIFile.h,v 1.41.20.1 2007/08/09 17:11:53 amoll Exp $
5 //
6 
7 #ifndef BALL_FORMAT_INIFILE_H
8 #define BALL_FORMAT_INIFILE_H
9 
10 #ifndef BALL_DATATYPE_STRINGHASHMAP_H
12 #endif
13 
14 #ifndef BALL_CONCEPT_PROCESSOR_H
15 # include <BALL/CONCEPT/processor.h>
16 #endif
17 
18 namespace BALL
19 {
20  class INIFile;
21 
29  {
30  public:
31 
34  enum
35  {
38  MAX_LINE_LENGTH = 1048576
39  };
40 
41  class IteratorTraits_;
42 
45  {
46  public:
47 
48  friend class INIFile;
49  friend class IteratorTraits_;
50 
52  const String& getName() const
53  {
54  return name_;
55  }
56 
58  bool operator == (const Section& section) const
59  {
60  return (name_ == section.name_ &&
61  lines_ == section.lines_);
62  }
63 
65  bool operator < (const Section& section) const
66  ;
67 
69  bool operator > (const Section& section) const
70  ;
71 
72  protected:
73 
74  // name of the section
76 
77  // all lines of the section
78  std::list<String> lines_;
79 
80  // hashmap with all keys
82  };
83 
85  typedef std::list<Section>::iterator SectionIterator;
86 
92 
96  static const String UNDEFINED;
97 
101  static const String HEADER;
102 
106 
112 
116  INIFile(const String& filename);
117 
120  virtual ~INIFile();
121 
126  void clear();
127 
129 
132 
152  bool read();
153 
160  bool write();
161 
164  const String& getFilename() const;
165 
169  void setFilename(const String& filename);
170 
172 
175 
179  bool isValid() const;
180 
182 
189 
198  LineIterator getLine(Size line_number);
199 
201 
205 
215  bool setLine(LineIterator line_it, const String& line);
216 
223  bool deleteLine(LineIterator line_it);
224 
234  bool insertLine(LineIterator line_it, const String& line);
235 
237 
240 
256  bool appendLine(const String& section_name, const String& line);
257 
259  bool appendLine(const String& line);
260 
264 
271  bool hasSection(const String& section_name) const;
272 
278  SectionIterator getSection(const String& section_name);
279 
285 
290 
300 
307  LineIterator getSectionLastLine(const String& section_name);
308 
315  Size getSectionLength(const String& section_name) const;
316 
322  bool deleteSection(const String& section);
323 
327  bool appendSection(const String& section);
328 
330 
333 
341  bool hasEntry(const String& section, const String& key) const;
342 
352  String getValue(const String& section, const String& key) const;
353 
364  bool setValue(const String& section, const String& key, const String& value);
365 
375  bool insertValue(const String& section, const String& key, const String& value);
376 
378  const INIFile& operator = (const INIFile& file)
379  ;
380 
382 
385 
390  bool operator == (const INIFile& inifile) const;
391 
394  bool isValid(const LineIterator& it) const;
395 
398  bool isValid(const SectionIterator& it) const;
399 
401 
405 
408  void setDuplicateKeyCheck(bool mode);
409 
413 
415  std::list<String> getContent() const
416  ;
417 
419  bool setContent(const std::list<String>& lines)
420  ;
421 
422  protected:
423 
425 
426  bool valid_;
427 
429 
430  // all sections, 0. section is HEADER
431  std::list<Section> sections_;
432 
433  // hashmap with the section names => index
435 
436  public:
437 
440  {
441  friend class INIFile;
442 
443  public:
444 
446 
447 
449 
452 
454  virtual ~IteratorTraits_();
455 
457  const IteratorTraits_& operator = (const IteratorTraits_ &traits);
458 
460  std::list<String>::iterator getPosition();
461 
463  SectionIterator getSection();
464 
466  const String& operator * () const;
467 
469  IteratorTraits_& operator ++ ();
470 
472  IteratorTraits_& operator -- ();
473 
475  IteratorTraits_& getSectionNextLine();
476 
478  bool operator == (const IteratorTraits_& traits) const;
479 
481  bool operator != (const IteratorTraits_& traits) const;
482 
484  bool operator + () const;
485 
487  bool isValid() const;
488 
490  void toSectionFirstLine();
491 
493  void toSectionLastLine();
494 
496  void toSectionEnd();
497 
499  bool isSectionFirstLine() const;
500 
502  bool isSectionLastLine() const;
503 
505  bool isSectionEnd() const;
506 
508  void toFirstLine();
509 
511  void toLastLine();
512 
514  void toEnd();
515 
516  protected:
517 
518  //_
519  IteratorTraits_(std::list<Section>& list,
520  SectionIterator section,
521  std::list<String>::iterator line);
522 
523  //_
524  const std::list<Section>* getBound_() const;
525 
526  //_
527  void setLine_(const String& line);
528 
529  private:
530 
531  std::list<Section>* bound_;
532  SectionIterator section_;
533  std::list<String>::iterator position_;
534  };
535  };
536 } // namespace BALL
537 
538 #endif // BALL_FORMAT_INIFILE_H
BALL::INIFile::getFilename
const String & getFilename() const
BALL::INIFile::INIFile
INIFile(const String &filename)
BALL::INIFile::insertLine
bool insertLine(LineIterator line_it, const String &line)
BALL_EXPORT
#define BALL_EXPORT
Definition: COMMON/global.h:50
BALL::INIFile::appendLine
bool appendLine(const String &line)
Append a line to the last section.
BALL::INIFile::hasEntry
bool hasEntry(const String &section, const String &key) const
BALL::INIFile::~INIFile
virtual ~INIFile()
BALL::INIFile::isValid
bool isValid(const LineIterator &it) const
BALL::INIFile::getSectionFirstLine
LineIterator getSectionFirstLine(const String &section_name)
BALL::INIFile::HEADER
static const String HEADER
Definition: INIFile.h:101
BALL::INIFile::setContent
bool setContent(const std::list< String > &lines)
BALL::INIFile::Section
Definition: INIFile.h:45
BALL::INIFile::Section::name_
String name_
Definition: INIFile.h:75
BALL::INIFile::SectionIterator
std::list< Section >::iterator SectionIterator
Definition: INIFile.h:85
BALL::INIFile::sections_
std::list< Section > sections_
Definition: INIFile.h:431
BALL::operator<
BALL_EXPORT bool operator<(const String &s1, const String &s2)
BALL::INIFile::deleteSection
bool deleteSection(const String &section)
BALL::INIFile::UNDEFINED
static const String UNDEFINED
Definition: INIFile.h:96
BALL::INIFile::isValid
bool isValid(const SectionIterator &it) const
BALL::INIFile::Section::key_map_
StringHashMap< std::list< String >::iterator > key_map_
Definition: INIFile.h:81
stringHashMap.h
BALL::String
Definition: string.h:57
BALL::operator>
BALL_EXPORT bool operator>(const String &s1, const String &s2)
BALL::INIFile::setDuplicateKeyCheck
void setDuplicateKeyCheck(bool mode)
BALL::INIFile::clear
void clear()
BALL::INIFile::filename_
String filename_
Definition: INIFile.h:428
BALL
Definition: constants.h:13
BALL::INIFile::section_index_
StringHashMap< SectionIterator > section_index_
Definition: INIFile.h:434
BALL::INIFile::Section::lines_
std::list< String > lines_
Definition: INIFile.h:78
BALL::INIFile::LineIterator
IteratorTraits_ LineIterator
Definition: INIFile.h:91
BALL::INIFile::Section::getName
const String & getName() const
Definition: INIFile.h:52
BALL::INIFile::setValue
bool setValue(const String &section, const String &key, const String &value)
BALL::INIFile::getSection
SectionIterator getSection(Position pos)
BALL::INIFile::setLine
bool setLine(LineIterator line_it, const String &line)
BALL::StringHashMap
Definition: stringHashMap.h:42
BALL::INIFile::check_duplicate_keys_
bool check_duplicate_keys_
Definition: INIFile.h:424
BALL::INIFile::getValue
String getValue(const String &section, const String &key) const
BALL::INIFile::getNumberOfSections
Size getNumberOfSections() const
BALL_SIZE_TYPE
BALL::INIFile::hasSection
bool hasSection(const String &section_name) const
BALL::UnaryProcessor
Definition: processor.h:60
BALL::INIFile::IteratorTraits_
Interface for the LineIterator.
Definition: INIFile.h:440
BALL::INIFile::deleteLine
bool deleteLine(LineIterator line_it)
BALL::INIFile::isValid
bool isValid() const
BALL::INIFile::appendLine
bool appendLine(const String &section_name, const String &line)
BALL::INIFile::apply
bool apply(UnaryProcessor< LineIterator > &processor)
BALL::INIFile
Definition: INIFile.h:29
BALL::INIFile::read
bool read()
processor.h
BALL::INIFile::getSectionLength
Size getSectionLength(const String &section_name) const
BALL::INIFile::INIFile
INIFile()
BALL::INIFile::getLine
LineIterator getLine(Size line_number)
BALL::operator==
BALL_EXPORT bool operator==(const String &s1, const String &s2)
BALL::INIFile::insertValue
bool insertValue(const String &section, const String &key, const String &value)
BALL::INIFile::duplicateKeyCheckEnabled
bool duplicateKeyCheckEnabled() const
BALL::INIFile::getSectionLastLine
LineIterator getSectionLastLine(const String &section_name)
BALL::INIFile::getSection
SectionIterator getSection(const String &section_name)
BALL::INIFile::getNumberOfLines
Size getNumberOfLines() const
BALL::INIFile::valid_
bool valid_
Definition: INIFile.h:426
BALL_CREATE
#define BALL_CREATE(name)
Definition: create.h:62
BALL::INIFile::setFilename
void setFilename(const String &filename)
BALL::INIFile::appendSection
bool appendSection(const String &section)
BALL::INIFile::write
bool write()
BALL::INIFile::getContent
std::list< String > getContent() const