aboutsummaryrefslogtreecommitdiffstats
path: root/src/addressList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/addressList.cpp')
-rw-r--r--src/addressList.cpp188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/addressList.cpp b/src/addressList.cpp
new file mode 100644
index 00000000..c532c16d
--- /dev/null
+++ b/src/addressList.cpp
@@ -0,0 +1,188 @@
+//
+// 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.
+//
+
+#include "addressList.hpp"
+#include "parserHelpers.hpp"
+
+
+namespace vmime
+{
+
+
+addressList::addressList()
+{
+}
+
+
+addressList::addressList(const class addressList& addressList)
+ : component()
+{
+ copyFrom(addressList);
+}
+
+
+addressList::~addressList()
+{
+ clear();
+}
+
+
+void addressList::parse(const string& buffer, const string::size_type position,
+ const string::size_type end, string::size_type* newPosition)
+{
+ clear();
+
+ string::size_type pos = position;
+
+ while (pos < end)
+ {
+ address* parsedAddress = address::parseNext(buffer, pos, end, &pos);
+
+ if (parsedAddress != NULL)
+ m_list.push_back(parsedAddress);
+ }
+
+ if (newPosition)
+ *newPosition = end;
+}
+
+
+void addressList::generate(utility::outputStream& os, const string::size_type maxLineLength,
+ const string::size_type curLinePos, string::size_type* newLinePos) const
+{
+ if (!m_list.empty())
+ {
+ string::size_type pos = curLinePos;
+ const_iterator i = m_list.begin();
+
+ for ( ; ; )
+ {
+ (*i).generate(os, maxLineLength - 2, pos, &pos);
+
+ if (++i != m_list.end())
+ {
+ os << ", ";
+ pos += 2;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if (newLinePos)
+ *newLinePos = pos;
+ }
+}
+
+
+/** Return the number of addresses in the list.
+ *
+ * @return number of addresses in the list
+ */
+
+const std::vector <address*>::size_type addressList::size() const
+{
+ return (m_list.size());
+}
+
+
+/** Return the number of addresses in the list.
+ *
+ * @return number of addresses in the list
+ */
+
+const std::vector <address*>::size_type addressList::count() const
+{
+ return (m_list.size());
+}
+
+
+/** Test whether the list is empty.
+ *
+ * @return true if the list is empty, false otherwise
+ */
+
+const bool addressList::empty() const
+{
+ return (m_list.empty());
+}
+
+
+/** Append an address to the list.
+ *
+ * @param addr the address to add
+ */
+
+void addressList::append(const address& addr)
+{
+ m_list.push_back(addr.clone());
+}
+
+
+/** Insert an address at the specified position in the list.
+ *
+ * @param it position of the new address
+ * @param addr the address to insert
+ */
+
+void addressList::insert(const iterator it, const address& addr)
+{
+ m_list.insert(it.m_iterator, addr.clone());
+}
+
+
+/** Remove the address at the specified position.
+ *
+ * @param it position of the address to remove
+ */
+
+void addressList::erase(const iterator it)
+{
+ delete (*it.m_iterator);
+ m_list.erase(it.m_iterator);
+}
+
+
+/** Remove all the addresses from the list.
+ */
+
+void addressList::clear()
+{
+ free_container(m_list);
+}
+
+
+void addressList::copyFrom(const addressList& source)
+{
+ clear();
+
+ for (std::vector <address*>::const_iterator i = source.m_list.begin() ; i != source.m_list.end() ; ++i)
+ m_list.push_back((*i)->clone());
+}
+
+
+addressList& addressList::operator=(const addressList& source)
+{
+ copyFrom(source);
+ return (*this);
+}
+
+
+} // vmime