aboutsummaryrefslogtreecommitdiffstats
path: root/src/propertySet.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/propertySet.hpp')
-rw-r--r--src/propertySet.hpp335
1 files changed, 0 insertions, 335 deletions
diff --git a/src/propertySet.hpp b/src/propertySet.hpp
deleted file mode 100644
index 569c994d..00000000
--- a/src/propertySet.hpp
+++ /dev/null
@@ -1,335 +0,0 @@
-//
-// VMime library (http://vmime.sourceforge.net)
-// Copyright (C) 2002-2004 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 2 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
-
-#ifndef VMIME_PROPERTY_HPP_INCLUDED
-#define VMIME_PROPERTY_HPP_INCLUDED
-
-
-#include <list>
-#include <functional>
-#include <algorithm>
-#include <sstream>
-
-#include "base.hpp"
-#include "exception.hpp"
-
-#include "utility/stringUtils.hpp"
-
-
-namespace vmime
-{
-
-
-/** Manage a list of (name,value) pairs.
- */
-
-class propertySet
-{
-protected:
-
- class property
- {
- public:
-
- property(const string& name, const string& value);
- property(const string& name);
- property(const property& prop);
-
- /** Return the name of the property.
- *
- * @return property name
- */
- const string& getName() const;
-
- /** Return the value of the property as a string.
- *
- * @return current value of the property
- */
- const string& getValue() const;
-
- /** Set the value of the property as a string.
- *
- * @param value new value for property
- */
- void setValue(const string& value);
-
- /** Set the value of the property as a generic type.
- *
- * @param value new value for property
- */
- template <class TYPE> void setValue(const TYPE& value);
-
- /** Get the value of the property as a generic type.
- *
- * @throw exceptions::invalid_property_type if the specified
- * type is incompatible with the string value (cannot be
- * converted using std::istringstream)
- * @return current value of the property
- */
- template <class TYPE> const TYPE getValue() const;
-
- private:
-
- const string m_name;
- string m_value;
- };
-
- class propertyProxy
- {
- public:
-
- propertyProxy(const string& name, propertySet* set)
- : m_name(name), m_set(set)
- {
- }
-
- template <class TYPE>
- propertyProxy& operator=(const TYPE& value)
- {
- m_set->setProperty(m_name, value);
- return (*this);
- }
-
- template <class TYPE>
- void setValue(const TYPE& value)
- {
- m_set->setProperty(m_name, value);
- }
-
- template <class TYPE>
- const TYPE getValue() const
- {
- return (m_set->getProperty <TYPE>(m_name));
- }
-
- operator string() const
- {
- return (m_set->getProperty <string>(m_name));
- }
-
- private:
-
- const string m_name;
- propertySet* m_set;
- };
-
- class constPropertyProxy
- {
- public:
-
- constPropertyProxy(const string& name, const propertySet* set)
- : m_name(name), m_set(set)
- {
- }
-
- template <class TYPE>
- const TYPE getValue() const
- {
- return (m_set->getProperty <TYPE>(m_name));
- }
-
- operator string() const
- {
- return (m_set->getProperty <string>(m_name));
- }
-
- private:
-
- const string m_name;
- const propertySet* m_set;
- };
-
-public:
-
- propertySet();
- propertySet(const string& props);
- propertySet(const propertySet& set);
-
- ~propertySet();
-
- propertySet& operator=(const propertySet& set);
-
- /** Parse a string and extract one or more properties.
- * The string format is: name[=value](;name[=value])*.
- *
- * @param props string representing a list of properties
- */
- void setFromString(const string& props);
-
- /** Remove all properties from the list.
- */
- void removeAllProperties();
-
- /** Remove the specified property.
- *
- * @param name name of the property to remove
- */
- void removeProperty(const string& name);
-
- /** Test whether the specified property is set.
- *
- * @param name name of the property to test
- * @return true if the property is set (has a value),
- * false otherwise
- */
- const bool hasProperty(const string& name) const;
-
- /** Get the value of the specified property.
- *
- * @throw exceptions::no_such_property if the property does not exist
- * @param name property name
- * @return value of the specified property
- */
- template <class TYPE>
- const TYPE getProperty(const string& name) const
- {
- const property* const prop = find(name);
- if (!prop) throw exceptions::no_such_property(name);
-
- //return (prop->getValue <TYPE>()); // BUG: with g++ < 3.4
- return (prop->template getValue <TYPE>());
- }
-
- /** Get the value of the specified property.
- * A default value can be returned if the property is not set.
- *
- * @param name property name
- * @param defaultValue value to return if the specified property
- * does not exist
- * @return value of the specified property or default value
- * if if does not exist
- */
- template <class TYPE>
- const TYPE getProperty(const string& name, const TYPE defaultValue) const
- {
- const property* const prop = find(name);
- //return (prop ? prop->getValue <TYPE>() : defaultValue); // BUG: with g++ < 3.4
- return (prop ? prop->template getValue <TYPE>() : defaultValue);
- }
-
- /** Change the value of the specified property or create
- * a new property set to the specified a value.
- *
- * @param name property name
- * @param value property value
- */
- template <class TYPE>
- void setProperty(const string& name, const TYPE& value)
- {
- findOrCreate(name)->setValue(value);
- }
-
- /** Return a proxy object to access the specified property
- * suitable for reading or writing. If the property does not
- * exist and the value is changed, a new property will
- * be created.
- *
- * @param name property name
- * @return proxy object for the specified property
- */
- propertyProxy operator[](const string& name);
-
- /** Return a proxy object to access the specified property
- * suitable for reading only.
- *
- * @throw exceptions::no_such_property if the property does not exist
- * @return read-only proxy object for the specified property
- */
- const constPropertyProxy operator[](const string& name) const;
-
-private:
-
- void parse(const string& props);
-
-
- class propFinder : public std::unary_function <property*, bool>
- {
- public:
-
- propFinder(const string& name) : m_name(stringUtils::toLower(name)) { }
-
- const bool operator()(property* const p) const
- {
- return (stringUtils::toLower(p->getName()) == m_name);
- }
-
- private:
-
- const std::string m_name;
- };
-
- property* find(const string& name) const;
- property* findOrCreate(const string& name);
-
- typedef std::list <property*> list_type;
- list_type m_props;
-
-public:
-
- /** Return the property list.
- *
- * @return list of properties
- */
- const std::vector <const property*> getPropertyList() const;
-
- /** Return the property list.
- *
- * @return list of properties
- */
- const std::vector <property*> getPropertyList();
-};
-
-
-
-template <class TYPE>
-void propertySet::property::setValue(const TYPE& value)
-{
- std::ostringstream oss;
- oss << value;
-
- m_value = oss.str();
-}
-
-
-template <class TYPE>
-const TYPE propertySet::property::getValue() const
-{
- TYPE val = TYPE();
-
- std::istringstream iss(m_value);
- iss >> val;
-
- if (iss.fail())
- throw exceptions::invalid_property_type();
-
- return (val);
-}
-
-
-template <> void propertySet::property::setValue(const string& value);
-template <> void propertySet::property::setValue(const bool& value);
-
-template <> const string propertySet::property::getValue() const;
-template <> const bool propertySet::property::getValue() const;
-
-
-} // vmime
-
-
-#endif // VMIME_PROPERTY_HPP_INCLUDED