You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/mimelib/msgcmp.cpp

278 lines
6.2 KiB

//=============================================================================
// File: msgcmp.cpp
// Contents: Definitions for DwMessageComponent
// Maintainer: Doug Sauder <dwsauder@fwb.gulf.net>
// WWW: http://www.fwb.gulf.net/~dwsauder/mimepp.html
//
// Copyright (c) 1996, 1997 Douglas W. Sauder
// All rights reserved.
//
// IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT,
// INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
// THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER
// HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT
// NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
// BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
//
//=============================================================================
#define DW_IMPLEMENTATION
#include <mimelib/config.h>
#include <mimelib/debug.h>
#include <stdlib.h>
#include <mimelib/msgcmp.h>
#define kMagicNumber ((DwUint32) 0x22222222L)
const char* const DwMessageComponent::sClassName = "DwMessageComponent";
DwMessageComponent::DwMessageComponent()
{
mMagicNumber = (DwUint32) kMagicNumber;
mIsModified = 0;
mParent = 0;
mClassId = kCidMessageComponent;
mClassName = sClassName;
mId = DwString();
}
DwMessageComponent::DwMessageComponent(const DwMessageComponent& aCmp)
: mString(aCmp.mString)
{
mMagicNumber = (DwUint32) kMagicNumber;
mIsModified = aCmp.mIsModified;
mParent = 0;
mClassId = kCidMessageComponent;
mClassName = sClassName;
mId = aCmp.mId;
}
DwMessageComponent::DwMessageComponent(const DwString& aStr,
DwMessageComponent* aParent)
: mString(aStr)
{
mMagicNumber = (DwUint32) kMagicNumber;
mIsModified = 0;
mParent = aParent;
mClassId = kCidMessageComponent;
mClassName = sClassName;
mId = DwString();
}
DwMessageComponent::~DwMessageComponent()
{
#if defined (DW_DEBUG_VERSION) || defined (DW_DEVELOPMENT_VERSION)
if (mMagicNumber != (DwUint32) kMagicNumber) {
std::cerr << "Bad value for 'this' in destructor" << std::endl;
std::cerr << "(Possibly 'delete' was called twice for same object)"
<< std::endl;
abort();
}
mMagicNumber = 0;
#endif // defined (DW_DEBUG_VERSION) || defined (DW_DEVELOPMENT_VERSION)
}
const DwMessageComponent&
DwMessageComponent::operator = (const DwMessageComponent& aCmp)
{
if (this == &aCmp) return *this;
mString = aCmp.mString;
mIsModified = aCmp.mIsModified;
mId = aCmp.mId;
return *this;
}
void DwMessageComponent::FromString(const DwString& aStr)
{
mString = aStr;
mIsModified = DwFalse;
if (mParent != 0) {
mParent->SetModified();
}
}
void DwMessageComponent::FromString(const char* aCstr)
{
assert(aCstr != 0);
mString = aCstr;
if (mParent != 0) {
mParent->SetModified();
}
}
const DwString& DwMessageComponent::AsString()
{
return mString;
}
DwMessageComponent* DwMessageComponent::Parent()
{
return mParent;
}
void DwMessageComponent::SetParent(DwMessageComponent* aParent)
{
mParent = aParent;
}
DwBool DwMessageComponent::IsModified() const
{
return mIsModified;
}
void DwMessageComponent::SetModified()
{
mIsModified = 1;
if (mParent != 0) {
mParent->SetModified();
}
}
int DwMessageComponent::ClassId() const
{
return mClassId;
}
const char* DwMessageComponent::ClassName() const
{
return mClassName;
}
int DwMessageComponent::ObjectId() const
{
return (int) (long) this;
}
#if defined (DW_DEBUG_VERSION)
void DwMessageComponent::PrintDebugInfo(std::ostream& aStrm, int /*aDepth*/) const
{
_PrintDebugInfo(aStrm);
}
#else
void DwMessageComponent::PrintDebugInfo(std::ostream& , int ) const {}
#endif // defined (DW_DEBUG_VERSION)
#if defined (DW_DEBUG_VERSION)
void DwMessageComponent::_PrintDebugInfo(std::ostream& aStrm) const
{
aStrm << "ObjectId: " << ObjectId() << '\n';
aStrm << "ClassId: ";
switch (ClassId()) {
case kCidError:
aStrm << "kCidError";
break;
case kCidUnknown:
aStrm << "kCidUnknown";
break;
case kCidAddress:
aStrm << "kCidAddress";
break;
case kCidAddressList:
aStrm << "kCidAddressList";
break;
case kCidBody:
aStrm << "kCidBody";
break;
case kCidBodyPart:
aStrm << "kCidBodyPart";
break;
case kCidDispositionType:
aStrm << "kCidDispositionType";
break;
case kCidMechanism:
aStrm << "kCidMechanism";
break;
case kCidMediaType:
aStrm << "kCidMediaType";
break;
case kCidParameter:
aStrm << "kCidParameter";
break;
case kCidDateTime:
aStrm << "kCidDateTime";
break;
case kCidEntity:
aStrm << "kCidEntity";
break;
case kCidField:
aStrm << "kCidField";
break;
case kCidFieldBody:
aStrm << "kCidFieldBody";
break;
case kCidGroup:
aStrm << "kCidGroup";
break;
case kCidHeaders:
aStrm << "kCidHeaders";
break;
case kCidMailbox:
aStrm << "kCidMailbox";
break;
case kCidMailboxList:
aStrm << "kCidMailboxList";
break;
case kCidMessage:
aStrm << "kCidMessage";
break;
case kCidMessageComponent:
aStrm << "kCidMessageComponent";
break;
case kCidMsgId:
aStrm << "kCidMsgId";
break;
case kCidText:
aStrm << "kCidText";
break;
}
aStrm << '\n';
aStrm << "ClassName: " << ClassName() << '\n';
aStrm << "String: " << mString << '\n';
aStrm << "IsModified: " << (IsModified() ? "True" : "False") << '\n';
aStrm << "Parent ObjectId: ";
if (mParent) {
aStrm << mParent->ObjectId() << '\n';
}
else {
aStrm << "(none)\n";
}
}
#else
void DwMessageComponent::_PrintDebugInfo(std::ostream& ) const {}
#endif // defined (DW_DEBUG_VERSION)
void DwMessageComponent::CheckInvariants() const
{
#if defined (DW_DEBUG_VERSION)
assert(mMagicNumber == kMagicNumber);
assert(mClassName != 0);
mString.CheckInvariants();
#endif // defined (DW_DEBUG_VERSION)
}