// ==========================================================================
// 							Class Implementation : COXDiffFileHeader
// ==========================================================================

// Header file : OXDFlHdr.cpp

// Version: 9.3

// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement").  Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office.  For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
                          
// //////////////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "oxdflhdr.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(COXDiffFileHeader, CObject)

/////////////////////////////////////////////////////////////////////////////
// Definition of static members


// Data members -------------------------------------------------------------
// protected:

// private:
	
// Member functions ---------------------------------------------------------
// public:

COXDiffFileHeader::COXDiffFileHeader(CString sSignature)
	: m_sSignText(sSignature) 
	{
	}

CString COXDiffFileHeader::GetSignature() const
	{
	return m_sSignText;
	}

void COXDiffFileHeader::ReadHeader(CFile* pFile)
	{
	ASSERT_VALID(pFile);

	CArchive readArchive(pFile, CArchive::load);

	Read(readArchive);
	readArchive.Close();
	}

void COXDiffFileHeader::WriteHeader(CFile* pFile)
	{
	ASSERT_VALID(pFile);

	CArchive writeArchive(pFile, CArchive::store | CArchive::bNoFlushOnDelete);
	Write(writeArchive);

	writeArchive.Flush();
	writeArchive.Close();
	}

void COXDiffFileHeader::Serialize(CArchive& ar)
	{
	ASSERT_VALID(this);
	if (ar.IsStoring())
		Write(ar);
	else
		Read(ar);
	ASSERT_VALID(this);
	}
	
void COXDiffFileHeader::Read(CArchive& ar, BOOL bReportLogicalErrors /* = TRUE */)
{
	ASSERT_VALID(this);
	char pszSignature[255 + 1];  
	

	if (ar.Read(pszSignature, m_sSignText.GetLength()) != (UINT)m_sSignText.GetLength())
	{
	    TRACE(_T("*** COXDiffFileHeader::Read : End Of File reached while reading signature\n"));
		AfxThrowArchiveException(CArchiveException::endOfFile);
	}
	pszSignature[m_sSignText.GetLength()] = '\0';

	// ... Transfering to data members
	CString sSignature = CString(pszSignature);
	if (sSignature != m_sSignText)
	{
	    TRACE(_T("*** COXDiffFileHeader::Read : Invalid signature\n"));
		if (bReportLogicalErrors)
			AfxThrowArchiveException(CArchiveException::badSchema);
	}

	ASSERT_VALID(this);
}

void COXDiffFileHeader::Write(CArchive& ar)
	{                                     
	ASSERT_VALID(this);

	ar.Write((LPCTSTR)m_sSignText, m_sSignText.GetLength());

	ASSERT_VALID(this);
	}

COXDiffFileHeader::COXDiffFileHeader(const COXDiffFileHeader& HdrSrc)
	{
	ASSERT_VALID(&HdrSrc);
	
	m_sSignText = HdrSrc.m_sSignText;
	ASSERT_VALID(this);
	}
    
COXDiffFileHeader& COXDiffFileHeader::operator=(const COXDiffFileHeader& HdrSrc)
	{
	ASSERT_VALID(this);
	ASSERT_VALID(&HdrSrc);
	
	if(this==&HdrSrc)
		return *this;
		
	m_sSignText = HdrSrc.m_sSignText;
	ASSERT_VALID(this);
	
	return *this;
	}
	

COXDiffFileHeader::~COXDiffFileHeader()
	{
	}

// protected:

// private:

// Diagnostics ---------------------------------------------------------------
#ifdef _DEBUG
void COXDiffFileHeader::AssertValid() const
	{
	CObject::AssertValid();
	}

void COXDiffFileHeader::Dump(CDumpContext& dc) const
	{
	CObject::Dump(dc);               
	
	dc << "\nm_sSignText : " << m_sSignText << "\n";
	}
#endif //_DEBUG

// ==========================================================================
