From 726af25bf024e8478fccd303a05d062c118dc6be Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Sun, 6 Feb 2005 17:14:08 +0000 Subject: [PATCH] Changed protected inheritance to simple composition. --- ChangeLog | 5 +++ src/addressList.cpp | 6 +++- src/mailboxList.cpp | 71 ++++++++++++++++++++++++++++++++++--------- vmime/mailboxList.hpp | 34 +++++++++++++++------ 4 files changed, 90 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4e0d5cbb..9909da71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,11 @@ VERSION 0.6.4cvs ================ +2005-02-06 Vincent Richard + + * mailboxList.{cpp|hpp}: dropped protected inheritance which was not + appropriate for this type of composition. + 2005-02-05 Vincent Richard * parserHelpers.hpp: moved 'static' functions into 'parserHelpers' class. diff --git a/src/addressList.cpp b/src/addressList.cpp index 85178961..fc9548b1 100644 --- a/src/addressList.cpp +++ b/src/addressList.cpp @@ -119,7 +119,11 @@ addressList& addressList::operator=(const addressList& other) addressList& addressList::operator=(const mailboxList& other) { - copyFrom(other); + removeAllAddresses(); + + for (int i = 0 ; i < other.getMailboxCount() ; ++i) + m_list.push_back(other.getMailboxAt(i)->clone()); + return (*this); } diff --git a/src/mailboxList.cpp b/src/mailboxList.cpp index 55f7532a..e18fad0b 100644 --- a/src/mailboxList.cpp +++ b/src/mailboxList.cpp @@ -31,14 +31,14 @@ mailboxList::mailboxList() mailboxList::mailboxList(const mailboxList& mboxList) - : addressList(mboxList) + : component(), m_list(mboxList.m_list) { } void mailboxList::appendMailbox(mailbox* mbox) { - addressList::appendAddress(mbox); + m_list.appendAddress(mbox); } @@ -46,7 +46,7 @@ void mailboxList::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox) { try { - addressList::insertAddressBefore(beforeMailbox, mbox); + m_list.insertAddressBefore(beforeMailbox, mbox); } catch (exceptions::no_such_address&) { @@ -57,7 +57,7 @@ void mailboxList::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox) void mailboxList::insertMailboxBefore(const int pos, mailbox* mbox) { - addressList::insertAddressBefore(pos, mbox); + m_list.insertAddressBefore(pos, mbox); } @@ -65,7 +65,7 @@ void mailboxList::insertMailboxAfter(mailbox* afterMailbox, mailbox* mbox) { try { - addressList::insertAddressAfter(afterMailbox, mbox); + m_list.insertAddressAfter(afterMailbox, mbox); } catch (exceptions::no_such_address&) { @@ -76,7 +76,7 @@ void mailboxList::insertMailboxAfter(mailbox* afterMailbox, mailbox* mbox) void mailboxList::insertMailboxAfter(const int pos, mailbox* mbox) { - addressList::insertAddressAfter(pos, mbox); + m_list.insertAddressAfter(pos, mbox); } @@ -84,7 +84,7 @@ void mailboxList::removeMailbox(mailbox* mbox) { try { - addressList::removeAddress(mbox); + m_list.removeAddress(mbox); } catch (exceptions::no_such_address&) { @@ -95,43 +95,43 @@ void mailboxList::removeMailbox(mailbox* mbox) void mailboxList::removeMailbox(const int pos) { - addressList::removeAddress(pos); + m_list.removeAddress(pos); } void mailboxList::removeAllMailboxes() { - addressList::removeAllAddresses(); + m_list.removeAllAddresses(); } const int mailboxList::getMailboxCount() const { - return (addressList::getAddressCount()); + return (m_list.getAddressCount()); } const bool mailboxList::isEmpty() const { - return (addressList::isEmpty()); + return (m_list.isEmpty()); } mailbox* mailboxList::getMailboxAt(const int pos) { - return static_cast (addressList::getAddressAt(pos)); + return static_cast (m_list.getAddressAt(pos)); } const mailbox* mailboxList::getMailboxAt(const int pos) const { - return static_cast (addressList::getAddressAt(pos)); + return static_cast (m_list.getAddressAt(pos)); } const std::vector mailboxList::getMailboxList() const { - const std::vector addrList = addressList::getAddressList(); + const std::vector addrList = m_list.getAddressList(); std::vector res; for (std::vector ::const_iterator it = addrList.begin() ; @@ -149,7 +149,7 @@ const std::vector mailboxList::getMailboxList() const const std::vector mailboxList::getMailboxList() { - const std::vector addrList = addressList::getAddressList(); + const std::vector addrList = m_list.getAddressList(); std::vector res; for (std::vector ::const_iterator it = addrList.begin() ; @@ -165,4 +165,45 @@ const std::vector mailboxList::getMailboxList() } +mailboxList* mailboxList::clone() const +{ + return new mailboxList(*this); +} + + +void mailboxList::copyFrom(const component& other) +{ + const mailboxList& mboxList = dynamic_cast (other); + + m_list = mboxList.m_list; +} + + +mailboxList& mailboxList::operator=(const mailboxList& other) +{ + copyFrom(other); + return (*this); +} + + +const std::vector mailboxList::getChildComponents() const +{ + return (m_list.getChildComponents()); +} + + +void mailboxList::parse(const string& buffer, const string::size_type position, + const string::size_type end, string::size_type* newPosition) +{ + m_list.parse(buffer, position, end, newPosition); +} + + +void mailboxList::generate(utility::outputStream& os, const string::size_type maxLineLength, + const string::size_type curLinePos, string::size_type* newLinePos) const +{ + m_list.generate(os, maxLineLength, curLinePos, newLinePos); +} + + } // vmime diff --git a/vmime/mailboxList.hpp b/vmime/mailboxList.hpp index a1e8b8f3..f737fd1f 100644 --- a/vmime/mailboxList.hpp +++ b/vmime/mailboxList.hpp @@ -30,24 +30,25 @@ namespace vmime /** A list of mailboxes (basic type). + * + * This class works exactly like 'addressList' except it prevents user + * from inserting mailbox groups where it is not allowed by the RFC. */ -#if (defined(__GNUC__) && (__GNUC__ >= 3) && (__GNUC_MINOR__ <= 2)) || defined(VMIME_NO_PROTECTED_INHERITANCE) -class mailboxList : public addressList // BUG with gcc <= 3.2 -#else -class mailboxList : protected addressList -#endif +class mailboxList : public component { - friend class mailboxGroup; - public: - // This class works exactly like 'addressList' except it prevents user - // from inserting mailbox groups where it is not allowed by the RFC. - mailboxList(); mailboxList(const mailboxList& mboxList); + + mailboxList* clone() const; + void copyFrom(const component& other); + mailboxList& operator=(const mailboxList& other); + + const std::vector getChildComponents() const; + /** Add a mailbox at the end of the list. * * @param mbox mailbox to append @@ -139,6 +140,19 @@ public: * @return list of mailboxes */ const std::vector getMailboxList(); + +private: + + addressList m_list; + +public: + + using component::parse; + using component::generate; + + // Component parsing & assembling + void parse(const string& buffer, const string::size_type position, const string::size_type end, string::size_type* newPosition = NULL); + void generate(utility::outputStream& os, const string::size_type maxLineLength = lineLengthLimits::infinite, const string::size_type curLinePos = 0, string::size_type* newLinePos = NULL) const; };