From 681297e10b666e13cc463f6fbb16236f36c3266c Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Tue, 12 Jul 2005 22:28:02 +0000 Subject: Reference counting and smart pointers. --- src/mailboxGroup.cpp | 62 ++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) (limited to 'src/mailboxGroup.cpp') diff --git a/src/mailboxGroup.cpp b/src/mailboxGroup.cpp index c018c3ce..1a5d3729 100644 --- a/src/mailboxGroup.cpp +++ b/src/mailboxGroup.cpp @@ -76,26 +76,24 @@ void mailboxGroup::parse(const string& buffer, const string::size_type position, while (pos < end) { - address* parsedAddress = address::parseNext(buffer, pos, end, &pos); + ref
parsedAddress = address::parseNext(buffer, pos, end, &pos); if (parsedAddress) { if (parsedAddress->isGroup()) { - mailboxGroup* group = static_cast (parsedAddress); + ref group = parsedAddress.staticCast (); // Sub-groups are not allowed in mailbox groups: so, we add all // the contents of the sub-group into this group... for (int i = 0 ; i < group->getMailboxCount() ; ++i) { - m_list.push_back(group->getMailboxAt(i)->clone()); + m_list.push_back(group->getMailboxAt(i)->clone().staticCast ()); } - - delete (parsedAddress); } else { - m_list.push_back(static_cast (parsedAddress)); + m_list.push_back(parsedAddress.staticCast ()); } } } @@ -160,7 +158,7 @@ void mailboxGroup::generate(utility::outputStream& os, const string::size_type m os << ":"; ++pos; - for (std::vector ::const_iterator it = m_list.begin() ; + for (std::vector >::const_iterator it = m_list.begin() ; it != m_list.end() ; ++it) { if (it != m_list.begin()) @@ -193,17 +191,17 @@ void mailboxGroup::copyFrom(const component& other) removeAllMailboxes(); - for (std::vector ::const_iterator it = source.m_list.begin() ; + for (std::vector >::const_iterator it = source.m_list.begin() ; it != source.m_list.end() ; ++it) { - m_list.push_back((*it)->clone()); + m_list.push_back((*it)->clone().staticCast ()); } } -mailboxGroup* mailboxGroup::clone() const +ref mailboxGroup::clone() const { - return new mailboxGroup(*this); + return vmime::create (*this); } @@ -238,15 +236,15 @@ const bool mailboxGroup::isEmpty() const } -void mailboxGroup::appendMailbox(mailbox* mbox) +void mailboxGroup::appendMailbox(ref mbox) { m_list.push_back(mbox); } -void mailboxGroup::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox) +void mailboxGroup::insertMailboxBefore(ref beforeMailbox, ref mbox) { - const std::vector ::iterator it = std::find + const std::vector >::iterator it = std::find (m_list.begin(), m_list.end(), beforeMailbox); if (it == m_list.end()) @@ -256,15 +254,15 @@ void mailboxGroup::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox) } -void mailboxGroup::insertMailboxBefore(const int pos, mailbox* mbox) +void mailboxGroup::insertMailboxBefore(const int pos, ref mbox) { m_list.insert(m_list.begin() + pos, mbox); } -void mailboxGroup::insertMailboxAfter(mailbox* afterMailbox, mailbox* mbox) +void mailboxGroup::insertMailboxAfter(ref afterMailbox, ref mbox) { - const std::vector ::iterator it = std::find + const std::vector >::iterator it = std::find (m_list.begin(), m_list.end(), afterMailbox); if (it == m_list.end()) @@ -274,31 +272,27 @@ void mailboxGroup::insertMailboxAfter(mailbox* afterMailbox, mailbox* mbox) } -void mailboxGroup::insertMailboxAfter(const int pos, mailbox* mbox) +void mailboxGroup::insertMailboxAfter(const int pos, ref mbox) { m_list.insert(m_list.begin() + pos + 1, mbox); } -void mailboxGroup::removeMailbox(mailbox* mbox) +void mailboxGroup::removeMailbox(ref mbox) { - const std::vector ::iterator it = std::find + const std::vector >::iterator it = std::find (m_list.begin(), m_list.end(), mbox); if (it == m_list.end()) throw exceptions::no_such_mailbox(); - delete (*it); - m_list.erase(it); } void mailboxGroup::removeMailbox(const int pos) { - const std::vector ::iterator it = m_list.begin() + pos; - - delete (*it); + const std::vector >::iterator it = m_list.begin() + pos; m_list.erase(it); } @@ -306,7 +300,7 @@ void mailboxGroup::removeMailbox(const int pos) void mailboxGroup::removeAllMailboxes() { - free_container(m_list); + m_list.clear(); } @@ -316,25 +310,25 @@ const int mailboxGroup::getMailboxCount() const } -mailbox* mailboxGroup::getMailboxAt(const int pos) +ref mailboxGroup::getMailboxAt(const int pos) { return (m_list[pos]); } -const mailbox* mailboxGroup::getMailboxAt(const int pos) const +const ref mailboxGroup::getMailboxAt(const int pos) const { return (m_list[pos]); } -const std::vector mailboxGroup::getMailboxList() const +const std::vector > mailboxGroup::getMailboxList() const { - std::vector list; + std::vector > list; list.reserve(m_list.size()); - for (std::vector ::const_iterator it = m_list.begin() ; + for (std::vector >::const_iterator it = m_list.begin() ; it != m_list.end() ; ++it) { list.push_back(*it); @@ -344,15 +338,15 @@ const std::vector mailboxGroup::getMailboxList() const } -const std::vector mailboxGroup::getMailboxList() +const std::vector > mailboxGroup::getMailboxList() { return (m_list); } -const std::vector mailboxGroup::getChildComponents() const +const std::vector > mailboxGroup::getChildComponents() const { - std::vector list; + std::vector > list; copy_vector(m_list, list); -- cgit v1.2.3