//============================================================================= // File: bodypart.cpp // Contents: Definitions for DwBodyPart // 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 <assert.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <iostream> #include <stdio.h> #include <mimelib/string.h> #include <mimelib/headers.h> #include <mimelib/bodypart.h> #include <mimelib/body.h> #include <mimelib/message.h> const char* const DwBodyPart::sClassName = "DwBodyPart"; DwBodyPart* (*DwBodyPart::sNewBodyPart)(const DwString&, DwMessageComponent*) = 0; DwBodyPart* DwBodyPart::NewBodyPart(const DwString& aStr, DwMessageComponent* aParent) { if (sNewBodyPart) { DwBodyPart* newPart = sNewBodyPart(aStr, aParent); //if( newPart ) // newPart->mNext = 0; return newPart; } else { return new DwBodyPart(aStr, aParent); } } DwBodyPart::DwBodyPart() { mNext = 0; mClassId = kCidBodyPart; mClassName = sClassName; } DwBodyPart::DwBodyPart(const DwBodyPart& aPart) : DwEntity(aPart) { mNext = 0; mClassId = kCidBodyPart; mClassName = sClassName; } DwBodyPart::DwBodyPart(const DwEntity& aPart) : DwEntity(aPart) { mNext = 0; mClassId = kCidBodyPart; mClassName = sClassName; } DwBodyPart::DwBodyPart(const DwString& aStr, DwMessageComponent* aParent) : DwEntity(aStr, aParent) { mNext = 0; mClassId = kCidBodyPart; mClassName = sClassName; } DwBodyPart::~DwBodyPart() { // fprintf( stderr, "\ndeleted a DwBodyPart\n"); } const DwBodyPart& DwBodyPart::operator = (const DwBodyPart& aPart) { if (this == &aPart) return *this; DwEntity::operator = (aPart); mNext = aPart.Next(); return *this; } DwBodyPart* DwBodyPart::Next() const { return (DwBodyPart*) mNext; } void DwBodyPart::SetNext(const DwBodyPart* aPart) { mNext = aPart; } DwMessageComponent* DwBodyPart::Clone() const { return new DwBodyPart(*this); } #if defined(DW_DEBUG_VERSION) void DwBodyPart::PrintDebugInfo(std::ostream& aStrm, int aDepth) const { aStrm << "----------- Debug info for DwBodyPart class -----------\n"; _PrintDebugInfo(aStrm); int depth = aDepth - 1; depth = (depth >= 0) ? depth : 0; if (aDepth == 0 || depth > 0) { mHeaders->PrintDebugInfo(aStrm, depth); mBody->PrintDebugInfo(aStrm, depth); } } #else void DwBodyPart::PrintDebugInfo(std::ostream&, int) const {} #endif // defined(DW_DEBUG_VERSION) #if defined(DW_DEBUG_VERSION) void DwBodyPart::_PrintDebugInfo(std::ostream& aStrm) const { DwEntity::_PrintDebugInfo(aStrm); aStrm << "Next body part: "; if (mNext) { aStrm << mNext->ObjectId() << '\n'; } else { aStrm << "(none)\n"; } } #else void DwBodyPart::_PrintDebugInfo(std::ostream& ) const {} #endif // defined(DW_DEBUG_VERSION) void DwBodyPart::CheckInvariants() const { #if defined(DW_DEBUG_VERSION) DwEntity::CheckInvariants(); #endif // defined(DW_DEBUG_VERSION) }