diff options
| author | Vincent Richard <[email protected]> | 2013-12-29 10:02:12 +0100 |
|---|---|---|
| committer | Vincent Richard <[email protected]> | 2013-12-29 10:02:12 +0100 |
| commit | 152c6bed75598a6ca5efb7914701157270155833 (patch) | |
| tree | 8faced1d75a45c819630323da256248415992ed0 /src/propertySet.cpp | |
| parent | Merge branch 'master' of https://github.com/kisli/vmime (diff) | |
| download | vmime-152c6bed75598a6ca5efb7914701157270155833.tar.gz vmime-152c6bed75598a6ca5efb7914701157270155833.zip | |
Merged source and header files in directory structure. Got rid of SConstruct build.
Diffstat (limited to 'src/propertySet.cpp')
| -rw-r--r-- | src/propertySet.cpp | 382 |
1 files changed, 0 insertions, 382 deletions
diff --git a/src/propertySet.cpp b/src/propertySet.cpp deleted file mode 100644 index c22e79a6..00000000 --- a/src/propertySet.cpp +++ /dev/null @@ -1,382 +0,0 @@ -// -// VMime library (http://www.vmime.org) -// Copyright (C) 2002-2013 Vincent Richard <[email protected]> -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 3 of -// the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// Linking this library statically or dynamically with other modules is making -// a combined work based on this library. Thus, the terms and conditions of -// the GNU General Public License cover the whole combination. -// - -#include "vmime/propertySet.hpp" -#include "vmime/parserHelpers.hpp" - - -namespace vmime -{ - - -propertySet::propertySet() -{ -} - - -propertySet::propertySet(const string& props) -{ - parse(props); -} - - -propertySet::propertySet(const propertySet& set) - : object() -{ - for (std::list <shared_ptr <property> >::const_iterator it = set.m_props.begin() ; it != set.m_props.end() ; ++it) - m_props.push_back(make_shared <property>(**it)); -} - - -propertySet::~propertySet() -{ - removeAllProperties(); -} - - -propertySet& propertySet::operator=(const propertySet& set) -{ - removeAllProperties(); - - for (std::list <shared_ptr <property> >::const_iterator it = set.m_props.begin() ; it != set.m_props.end() ; ++it) - m_props.push_back(make_shared <property>(**it)); - - return (*this); -} - - -void propertySet::setFromString(const string& props) -{ - parse(props); -} - - -void propertySet::removeAllProperties() -{ - m_props.clear(); -} - - -void propertySet::removeProperty(const string& name) -{ - std::list <shared_ptr <property> >::iterator it = std::find_if - (m_props.begin(), m_props.end(), propFinder(name)); - - if (it != m_props.end()) - m_props.erase(it); -} - - -void propertySet::parse(const string& props) -{ - const string::const_iterator end = props.end(); - string::const_iterator pos = props.begin(); - - for ( ; pos != end ; ) - { - // Skip white-spaces - for ( ; pos != end && parserHelpers::isSpace(*pos) ; ++pos) {} - - if (pos != end) - { - if (*pos == ';') - { - ++pos; - continue; - } - - // Extract the property name - const string::const_iterator optStart = pos; - - for ( ; pos != end && *pos != '=' ; ++pos) {} - - string::const_iterator optEnd = pos; - - for ( ; optEnd != optStart && parserHelpers::isSpace(*(optEnd - 1)) ; --optEnd) {} - - const string option(optStart, optEnd); - string value = "1"; - - if (pos != end) - { - ++pos; // skip '=' - - // Extract the value - for ( ; pos != end && parserHelpers::isSpace(*pos) ; ++pos) {} - - if (pos != end) - { - // A quoted-string - if (*pos == '"' || *pos == '\'') - { - value.reserve(50); - - const char quoteChar = *pos; - bool theEnd = false; - bool escape = false; - - for ( ; (pos != end) && !theEnd ; ++pos) - { - if (escape) - { - value += *pos; - escape = false; - } - else - { - if (*pos == '\\') - escape = true; - else if (*pos == quoteChar) - theEnd = true; - else - value += *pos; - } - } - - if (pos != end) - ++pos; - } - // Simple value - else - { - const string::const_iterator valStart = pos; - - for ( ; pos != end && !parserHelpers::isSpace(*pos) ; ++pos) {} - - value = string(valStart, pos); - } - - // Advance to the next ';' - for ( ; pos != end && (*pos != ';') ; ++pos) {} - - if (pos != end) - ++pos; // skip ';' - } - } - - m_props.push_back(make_shared <property>(option, value)); - } - } -} - - -shared_ptr <propertySet::property> propertySet::find(const string& name) const -{ - std::list <shared_ptr <property> >::const_iterator it = std::find_if - (m_props.begin(), m_props.end(), propFinder(name)); - - return (it != m_props.end() ? *it : null); -} - - -shared_ptr <propertySet::property> propertySet::findOrCreate(const string& name) -{ - std::list <shared_ptr <property> >::const_iterator it = std::find_if - (m_props.begin(), m_props.end(), propFinder(name)); - - if (it != m_props.end()) - { - return (*it); - } - else - { - shared_ptr <property> prop = make_shared <property>(name, ""); - m_props.push_back(prop); - return (prop); - } -} - - -propertySet::propertyProxy propertySet::operator[](const string& name) -{ - return (propertyProxy(name, this)); -} - - -const propertySet::constPropertyProxy propertySet::operator[](const string& name) const -{ - return (constPropertyProxy(name, this)); -} - - -bool propertySet::hasProperty(const string& name) const -{ - return (find(name) != NULL); -} - - -const std::vector <shared_ptr <const propertySet::property> > propertySet::getPropertyList() const -{ - std::vector <shared_ptr <const property> > res; - - for (list_type::const_iterator it = m_props.begin() ; it != m_props.end() ; ++it) - res.push_back(*it); - - return (res); -} - - -const std::vector <shared_ptr <propertySet::property> > propertySet::getPropertyList() -{ - std::vector <shared_ptr <property> > res; - - for (list_type::const_iterator it = m_props.begin() ; it != m_props.end() ; ++it) - res.push_back(*it); - - return (res); -} - - -// -// propertySet::property -// - -propertySet::property::property(const string& name, const string& value) - : m_name(name), m_value(value) -{ -} - - -propertySet::property::property(const string& name) - : m_name(name) -{ -} - - -propertySet::property::property(const property& prop) - : object(), m_name(prop.m_name), m_value(prop.m_value) -{ -} - - -const string& propertySet::property::getName() const -{ - return (m_name); -} - - -#ifndef _MSC_VER - - -const string& propertySet::property::getValue() const -{ - return (m_value); -} - - -void propertySet::property::setValue(const string& value) -{ - m_value = value; -} - - -#endif // !_MSC_VER - - -#ifndef VMIME_INLINE_TEMPLATE_SPECIALIZATION - -template <> -void propertySet::property::setValue(const string& value) -{ - m_value = value; -} - - -template <> -void propertySet::property::setValue(const bool& value) -{ - m_value = value ? "true" : "false"; -} - - -template <> -string propertySet::property::getValue() const -{ - return (m_value); -} - - -template <> -bool propertySet::property::getValue() const -{ - if (utility::stringUtils::toLower(m_value) == "true") - return true; - else - { - int val = 0; - - std::istringstream iss(m_value); - iss.imbue(std::locale::classic()); // no formatting - - iss >> val; - - return (!iss.fail() && val != 0); - } -} - - - - -template <> -string propertySet::valueFromString(const string& value) -{ - return value; -} - - -template <> -string propertySet::valueToString(const string& value) -{ - return value; -} - - -template <> -bool propertySet::valueFromString(const string& value) -{ - if (utility::stringUtils::toLower(value) == "true") - return true; - else - { - int val = 0; - - std::istringstream iss(value); - iss.imbue(std::locale::classic()); // no formatting - - iss >> val; - - return (!iss.fail() && val != 0); - } -} - - -template <> -string propertySet::valueToString(const bool& value) -{ - return (value ? "true" : "false"); -} - -#endif // VMIME_INLINE_TEMPLATE_SPECIALIZATION - - -} // vmime |
