File:  [WindowsNT SDKs] / mstools / mfc / samples / tutorial / person.cpp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:21:00 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-oct-1992, ntsdk-jun-1992, ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 297 06-28-1992

// person.cpp : Defines the class behaviors for CPerson, CPersonList.
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and Microsoft
// QuickHelp documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "person.h"
#include <string.h>

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

////////////////////////////////////////////
//
// Call 'IMPLEMENT_SERIAL' macro for all the
//  classes declared in person.h

IMPLEMENT_SERIAL( CPerson, CObject, 0 )
IMPLEMENT_SERIAL( CPersonList, CObList, 0 )

//////////////////////////////////////////////
// Define member functions for classes
//  declared in person.h
//

//////////////////////////////////////////////
//  CPerson::CPerson
//  Copy Constructor for CPerson class
//
CPerson::CPerson( const CPerson& a )
{
	ASSERT_VALID( this );
	ASSERT_VALID( &a );
	m_LastName = a.m_LastName;
	m_FirstName = a.m_FirstName;
	m_PhoneNumber = a.m_PhoneNumber;
	m_modTime = a.m_modTime;
}

//////////////////////////////////////////////
//  CPerson::CPerson
//  Memberwise Constructor for CPerson class
//
CPerson::CPerson( const char* pszLastName,
		 const char* pszFirstName,
		 const char* pszPhoneNum )
{
	ASSERT_VALID( this );
	m_LastName = pszLastName;
	m_FirstName = pszFirstName;
	m_PhoneNumber = pszPhoneNum;
	m_modTime = CTime::GetCurrentTime();
}

//////////////////////////////////////////////
//  CPerson::operator=
//  Overloaded operator= to perform assignments.
//
CPerson& CPerson::operator=( const CPerson& b )
{
	ASSERT_VALID( this );
	ASSERT_VALID( &b );
	m_LastName = b.m_LastName;
	m_FirstName = b.m_FirstName;
	m_PhoneNumber = b.m_PhoneNumber;
	m_modTime = b.m_modTime;
	return *this;
}

///////////////////////////////////////////////
//  CPerson::Dump
//  Write the contents of the object to a
//  diagnostic context
//
// The overloaded '<<' operator does all the hard work
//
#ifdef _DEBUG

void CPerson::Dump( CDumpContext& dc ) const
{
	ASSERT_VALID( this );
	// Call base class function first
	CObject::Dump( dc );

	// Now dump data for this class
	dc   << "\n"
		<< "Last Name: " << m_LastName << "\n"
		<< "First Name: " << m_FirstName << "\n"
		<< "Phone #: " << m_PhoneNumber << "\n"
		<< "Modification date: " << m_modTime << "\n";
}

void CPerson::AssertValid() const
{
	CObject::AssertValid();
}

#endif

/////////////////////////////////////////////
//  CPerson::Serialize
//  Read or write the contents of the object
//  to an archive
//
void CPerson::Serialize( CArchive& archive )
{
	ASSERT_VALID( this );
	// Call base class function first
	CObject::Serialize( archive );

	// Now dump data for this class
	if ( archive.IsStoring() )
	{
		TRACE( "Serializing a CPerson out.\n" );
		archive << m_LastName << m_FirstName << m_PhoneNumber
				<< m_modTime;
	}
	else
	{
		TRACE( "Serializing a CPerson in.\n" );
		archive >> m_LastName >> m_FirstName >> m_PhoneNumber
				>> m_modTime;
	}
}

//////////////////////////////////////////////////////////////////////////////
//  CPersonList
//  We inherit most of the functionality from CObList.  These are only
//  functions that we added to form our own list type.
//

//////////////////////////////////////////////
//  CPersonList::FindPerson
//
CPersonList* CPersonList::FindPerson( const char * szTarget )
{
	ASSERT_VALID( this );
	
	CPersonList* pNewList = new CPersonList;
	CPerson* pNext = NULL;
	
	// Start at front of list
	POSITION pos = GetHeadPosition();

	// Iterate over whole list
	while( pos != NULL )
	{
		// Get next element (note cast)
		pNext = (CPerson*)GetNext(pos);
	
		// Add current element to new list if it matches
		if ( _strnicmp( pNext->GetLastName(), szTarget, strlen( szTarget ) )
				 == 0 )
			pNewList->AddTail(pNext);
	}
	
	if ( pNewList->IsEmpty() )
	{
		delete pNewList;
		pNewList = NULL;
	}
	
	return pNewList;
}

//////////////////////////////////////////
//  CPersonList::DeleteAll
//  This will delete the objects in the list as the pointers.
//
void CPersonList::DeleteAll()
{
	ASSERT_VALID( this );
	POSITION pos = GetHeadPosition();

	while( pos != NULL )
	{
		delete GetNext(pos);
	}
	RemoveAll();
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.