Changed protected inheritance to simple composition.
This commit is contained in:
parent
95b56a7035
commit
726af25bf0
@ -2,6 +2,11 @@
|
|||||||
VERSION 0.6.4cvs
|
VERSION 0.6.4cvs
|
||||||
================
|
================
|
||||||
|
|
||||||
|
2005-02-06 Vincent Richard <vincent@vincent-richard.net>
|
||||||
|
|
||||||
|
* mailboxList.{cpp|hpp}: dropped protected inheritance which was not
|
||||||
|
appropriate for this type of composition.
|
||||||
|
|
||||||
2005-02-05 Vincent Richard <vincent@vincent-richard.net>
|
2005-02-05 Vincent Richard <vincent@vincent-richard.net>
|
||||||
|
|
||||||
* parserHelpers.hpp: moved 'static' functions into 'parserHelpers' class.
|
* parserHelpers.hpp: moved 'static' functions into 'parserHelpers' class.
|
||||||
|
@ -119,7 +119,11 @@ addressList& addressList::operator=(const addressList& other)
|
|||||||
|
|
||||||
addressList& addressList::operator=(const mailboxList& 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);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,14 +31,14 @@ mailboxList::mailboxList()
|
|||||||
|
|
||||||
|
|
||||||
mailboxList::mailboxList(const mailboxList& mboxList)
|
mailboxList::mailboxList(const mailboxList& mboxList)
|
||||||
: addressList(mboxList)
|
: component(), m_list(mboxList.m_list)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mailboxList::appendMailbox(mailbox* mbox)
|
void mailboxList::appendMailbox(mailbox* mbox)
|
||||||
{
|
{
|
||||||
addressList::appendAddress(mbox);
|
m_list.appendAddress(mbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ void mailboxList::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
addressList::insertAddressBefore(beforeMailbox, mbox);
|
m_list.insertAddressBefore(beforeMailbox, mbox);
|
||||||
}
|
}
|
||||||
catch (exceptions::no_such_address&)
|
catch (exceptions::no_such_address&)
|
||||||
{
|
{
|
||||||
@ -57,7 +57,7 @@ void mailboxList::insertMailboxBefore(mailbox* beforeMailbox, mailbox* mbox)
|
|||||||
|
|
||||||
void mailboxList::insertMailboxBefore(const int pos, 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
|
try
|
||||||
{
|
{
|
||||||
addressList::insertAddressAfter(afterMailbox, mbox);
|
m_list.insertAddressAfter(afterMailbox, mbox);
|
||||||
}
|
}
|
||||||
catch (exceptions::no_such_address&)
|
catch (exceptions::no_such_address&)
|
||||||
{
|
{
|
||||||
@ -76,7 +76,7 @@ void mailboxList::insertMailboxAfter(mailbox* afterMailbox, mailbox* mbox)
|
|||||||
|
|
||||||
void mailboxList::insertMailboxAfter(const int pos, 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
|
try
|
||||||
{
|
{
|
||||||
addressList::removeAddress(mbox);
|
m_list.removeAddress(mbox);
|
||||||
}
|
}
|
||||||
catch (exceptions::no_such_address&)
|
catch (exceptions::no_such_address&)
|
||||||
{
|
{
|
||||||
@ -95,43 +95,43 @@ void mailboxList::removeMailbox(mailbox* mbox)
|
|||||||
|
|
||||||
void mailboxList::removeMailbox(const int pos)
|
void mailboxList::removeMailbox(const int pos)
|
||||||
{
|
{
|
||||||
addressList::removeAddress(pos);
|
m_list.removeAddress(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mailboxList::removeAllMailboxes()
|
void mailboxList::removeAllMailboxes()
|
||||||
{
|
{
|
||||||
addressList::removeAllAddresses();
|
m_list.removeAllAddresses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const int mailboxList::getMailboxCount() const
|
const int mailboxList::getMailboxCount() const
|
||||||
{
|
{
|
||||||
return (addressList::getAddressCount());
|
return (m_list.getAddressCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const bool mailboxList::isEmpty() const
|
const bool mailboxList::isEmpty() const
|
||||||
{
|
{
|
||||||
return (addressList::isEmpty());
|
return (m_list.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mailbox* mailboxList::getMailboxAt(const int pos)
|
mailbox* mailboxList::getMailboxAt(const int pos)
|
||||||
{
|
{
|
||||||
return static_cast <mailbox*>(addressList::getAddressAt(pos));
|
return static_cast <mailbox*>(m_list.getAddressAt(pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const mailbox* mailboxList::getMailboxAt(const int pos) const
|
const mailbox* mailboxList::getMailboxAt(const int pos) const
|
||||||
{
|
{
|
||||||
return static_cast <const mailbox*>(addressList::getAddressAt(pos));
|
return static_cast <const mailbox*>(m_list.getAddressAt(pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const std::vector <const mailbox*> mailboxList::getMailboxList() const
|
const std::vector <const mailbox*> mailboxList::getMailboxList() const
|
||||||
{
|
{
|
||||||
const std::vector <const address*> addrList = addressList::getAddressList();
|
const std::vector <const address*> addrList = m_list.getAddressList();
|
||||||
std::vector <const mailbox*> res;
|
std::vector <const mailbox*> res;
|
||||||
|
|
||||||
for (std::vector <const address*>::const_iterator it = addrList.begin() ;
|
for (std::vector <const address*>::const_iterator it = addrList.begin() ;
|
||||||
@ -149,7 +149,7 @@ const std::vector <const mailbox*> mailboxList::getMailboxList() const
|
|||||||
|
|
||||||
const std::vector <mailbox*> mailboxList::getMailboxList()
|
const std::vector <mailbox*> mailboxList::getMailboxList()
|
||||||
{
|
{
|
||||||
const std::vector <address*> addrList = addressList::getAddressList();
|
const std::vector <address*> addrList = m_list.getAddressList();
|
||||||
std::vector <mailbox*> res;
|
std::vector <mailbox*> res;
|
||||||
|
|
||||||
for (std::vector <address*>::const_iterator it = addrList.begin() ;
|
for (std::vector <address*>::const_iterator it = addrList.begin() ;
|
||||||
@ -165,4 +165,45 @@ const std::vector <mailbox*> mailboxList::getMailboxList()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mailboxList* mailboxList::clone() const
|
||||||
|
{
|
||||||
|
return new mailboxList(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mailboxList::copyFrom(const component& other)
|
||||||
|
{
|
||||||
|
const mailboxList& mboxList = dynamic_cast <const mailboxList&>(other);
|
||||||
|
|
||||||
|
m_list = mboxList.m_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mailboxList& mailboxList::operator=(const mailboxList& other)
|
||||||
|
{
|
||||||
|
copyFrom(other);
|
||||||
|
return (*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const std::vector <const component*> 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
|
} // vmime
|
||||||
|
@ -30,24 +30,25 @@ namespace vmime
|
|||||||
|
|
||||||
|
|
||||||
/** A list of mailboxes (basic type).
|
/** 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 component
|
||||||
class mailboxList : public addressList // BUG with gcc <= 3.2
|
|
||||||
#else
|
|
||||||
class mailboxList : protected addressList
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
friend class mailboxGroup;
|
|
||||||
|
|
||||||
public:
|
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();
|
||||||
mailboxList(const mailboxList& mboxList);
|
mailboxList(const mailboxList& mboxList);
|
||||||
|
|
||||||
|
|
||||||
|
mailboxList* clone() const;
|
||||||
|
void copyFrom(const component& other);
|
||||||
|
mailboxList& operator=(const mailboxList& other);
|
||||||
|
|
||||||
|
const std::vector <const component*> getChildComponents() const;
|
||||||
|
|
||||||
/** Add a mailbox at the end of the list.
|
/** Add a mailbox at the end of the list.
|
||||||
*
|
*
|
||||||
* @param mbox mailbox to append
|
* @param mbox mailbox to append
|
||||||
@ -139,6 +140,19 @@ public:
|
|||||||
* @return list of mailboxes
|
* @return list of mailboxes
|
||||||
*/
|
*/
|
||||||
const std::vector <mailbox*> getMailboxList();
|
const std::vector <mailbox*> 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user