From ead8be9d1938192d3975efa2a77c444a43091320 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 10 Feb 2016 12:19:15 -0600 Subject: [PATCH] Move IniFile section chunk handling to IniFile::Section --- Source/Core/Common/IniFile.cpp | 62 ++++++++++++++++++++-------------- Source/Core/Common/IniFile.h | 6 +++- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp index 4285af64bc..50752aabc1 100644 --- a/Source/Core/Common/IniFile.cpp +++ b/Source/Core/Common/IniFile.cpp @@ -256,6 +256,37 @@ bool IniFile::Section::Delete(const std::string& key) return true; } +void IniFile::Section::SetLines(const std::vector& lines) +{ + m_lines = lines; +} + +bool IniFile::Section::GetLines(std::vector* lines, const bool remove_comments) const +{ + for (std::string line : m_lines) + { + line = StripSpaces(line); + + if (remove_comments) + { + size_t commentPos = line.find('#'); + if (commentPos == 0) + { + continue; + } + + if (commentPos != std::string::npos) + { + line = StripSpaces(line.substr(0, commentPos)); + } + } + + lines->push_back(line); + } + + return true; +} + // IniFile const IniFile::Section* IniFile::GetSection(const std::string& sectionName) const @@ -312,7 +343,7 @@ bool IniFile::Exists(const std::string& sectionName, const std::string& key) con void IniFile::SetLines(const std::string& sectionName, const std::vector& lines) { Section* section = GetOrCreateSection(sectionName); - section->lines = lines; + section->SetLines(lines); } bool IniFile::DeleteKey(const std::string& sectionName, const std::string& key) @@ -345,28 +376,7 @@ bool IniFile::GetLines(const std::string& sectionName, std::vector* if (!section) return false; - for (std::string line : section->lines) - { - line = StripSpaces(line); - - if (remove_comments) - { - size_t commentPos = line.find('#'); - if (commentPos == 0) - { - continue; - } - - if (commentPos != std::string::npos) - { - line = StripSpaces(line.substr(0, commentPos)); - } - } - - lines->push_back(line); - } - - return true; + return section->GetLines(lines, remove_comments); } void IniFile::SortSections() @@ -439,7 +449,7 @@ bool IniFile::Load(const std::string& filename, bool keep_current_data) // INI is a hack anyway. if ((key == "" && value == "") || (line.size() >= 1 && (line[0] == '$' || line[0] == '+' || line[0] == '*'))) - current_section->lines.push_back(line); + current_section->m_lines.push_back(line); else current_section->Set(key, value); } @@ -464,12 +474,12 @@ bool IniFile::Save(const std::string& filename) for (const Section& section : sections) { - if (section.keys_order.size() != 0 || section.lines.size() != 0) + if (section.keys_order.size() != 0 || section.m_lines.size() != 0) out << "[" << section.name << "]" << std::endl; if (section.keys_order.size() == 0) { - for (const std::string& s : section.lines) + for (const std::string& s : section.m_lines) out << s << std::endl; } else diff --git a/Source/Core/Common/IniFile.h b/Source/Core/Common/IniFile.h index 67b64a103b..e2021261b1 100644 --- a/Source/Core/Common/IniFile.h +++ b/Source/Core/Common/IniFile.h @@ -66,18 +66,22 @@ public: bool Get(const std::string& key, double* value, double defaultValue = 0.0) const; bool Get(const std::string& key, std::vector* values) const; + void SetLines(const std::vector& lines); + bool GetLines(std::vector* lines, const bool remove_comments = true) const; + bool operator<(const Section& other) const { return name < other.name; } using SectionMap = std::map; const std::string& GetName() const { return name; } const SectionMap& GetValues() const { return values; } + bool HasLines() const { return !m_lines.empty(); } protected: std::string name; std::vector keys_order; SectionMap values; - std::vector lines; + std::vector m_lines; }; /**