Annotation of mstools/mfc/samples/tutorial/person.cpp, revision 1.1.1.1

1.1       root        1: // person.cpp : Defines the class behaviors for CPerson, CPersonList.
                      2: //
                      3: // This is a part of the Microsoft Foundation Classes C++ library.
                      4: // Copyright (C) 1992 Microsoft Corporation
                      5: // All rights reserved.
                      6: //
                      7: // This source code is only intended as a supplement to the
                      8: // Microsoft Foundation Classes Reference and Microsoft
                      9: // QuickHelp documentation provided with the library.
                     10: // See these sources for detailed information regarding the
                     11: // Microsoft Foundation Classes product.
                     12: 
                     13: #include "person.h"
                     14: #include <string.h>
                     15: 
                     16: #ifdef _DEBUG
                     17: #undef THIS_FILE
                     18: static char BASED_CODE THIS_FILE[] = __FILE__;
                     19: #endif
                     20: 
                     21: ////////////////////////////////////////////
                     22: //
                     23: // Call 'IMPLEMENT_SERIAL' macro for all the
                     24: //  classes declared in person.h
                     25: 
                     26: IMPLEMENT_SERIAL( CPerson, CObject, 0 )
                     27: IMPLEMENT_SERIAL( CPersonList, CObList, 0 )
                     28: 
                     29: //////////////////////////////////////////////
                     30: // Define member functions for classes
                     31: //  declared in person.h
                     32: //
                     33: 
                     34: //////////////////////////////////////////////
                     35: //  CPerson::CPerson
                     36: //  Copy Constructor for CPerson class
                     37: //
                     38: CPerson::CPerson( const CPerson& a )
                     39: {
                     40:        ASSERT_VALID( this );
                     41:        ASSERT_VALID( &a );
                     42:        m_LastName = a.m_LastName;
                     43:        m_FirstName = a.m_FirstName;
                     44:        m_PhoneNumber = a.m_PhoneNumber;
                     45:        m_modTime = a.m_modTime;
                     46: }
                     47: 
                     48: //////////////////////////////////////////////
                     49: //  CPerson::CPerson
                     50: //  Memberwise Constructor for CPerson class
                     51: //
                     52: CPerson::CPerson( const char* pszLastName,
                     53:                 const char* pszFirstName,
                     54:                 const char* pszPhoneNum )
                     55: {
                     56:        ASSERT_VALID( this );
                     57:        m_LastName = pszLastName;
                     58:        m_FirstName = pszFirstName;
                     59:        m_PhoneNumber = pszPhoneNum;
                     60:        m_modTime = CTime::GetCurrentTime();
                     61: }
                     62: 
                     63: //////////////////////////////////////////////
                     64: //  CPerson::operator=
                     65: //  Overloaded operator= to perform assignments.
                     66: //
                     67: CPerson& CPerson::operator=( const CPerson& b )
                     68: {
                     69:        ASSERT_VALID( this );
                     70:        ASSERT_VALID( &b );
                     71:        m_LastName = b.m_LastName;
                     72:        m_FirstName = b.m_FirstName;
                     73:        m_PhoneNumber = b.m_PhoneNumber;
                     74:        m_modTime = b.m_modTime;
                     75:        return *this;
                     76: }
                     77: 
                     78: ///////////////////////////////////////////////
                     79: //  CPerson::Dump
                     80: //  Write the contents of the object to a
                     81: //  diagnostic context
                     82: //
                     83: // The overloaded '<<' operator does all the hard work
                     84: //
                     85: #ifdef _DEBUG
                     86: 
                     87: void CPerson::Dump( CDumpContext& dc ) const
                     88: {
                     89:        ASSERT_VALID( this );
                     90:        // Call base class function first
                     91:        CObject::Dump( dc );
                     92: 
                     93:        // Now dump data for this class
                     94:        dc   << "\n"
                     95:                << "Last Name: " << m_LastName << "\n"
                     96:                << "First Name: " << m_FirstName << "\n"
                     97:                << "Phone #: " << m_PhoneNumber << "\n"
                     98:                << "Modification date: " << m_modTime << "\n";
                     99: }
                    100: 
                    101: void CPerson::AssertValid() const
                    102: {
                    103:        CObject::AssertValid();
                    104: }
                    105: 
                    106: #endif
                    107: 
                    108: /////////////////////////////////////////////
                    109: //  CPerson::Serialize
                    110: //  Read or write the contents of the object
                    111: //  to an archive
                    112: //
                    113: void CPerson::Serialize( CArchive& archive )
                    114: {
                    115:        ASSERT_VALID( this );
                    116:        // Call base class function first
                    117:        CObject::Serialize( archive );
                    118: 
                    119:        // Now dump data for this class
                    120:        if ( archive.IsStoring() )
                    121:        {
                    122:                TRACE( "Serializing a CPerson out.\n" );
                    123:                archive << m_LastName << m_FirstName << m_PhoneNumber
                    124:                                << m_modTime;
                    125:        }
                    126:        else
                    127:        {
                    128:                TRACE( "Serializing a CPerson in.\n" );
                    129:                archive >> m_LastName >> m_FirstName >> m_PhoneNumber
                    130:                                >> m_modTime;
                    131:        }
                    132: }
                    133: 
                    134: //////////////////////////////////////////////////////////////////////////////
                    135: //  CPersonList
                    136: //  We inherit most of the functionality from CObList.  These are only
                    137: //  functions that we added to form our own list type.
                    138: //
                    139: 
                    140: //////////////////////////////////////////////
                    141: //  CPersonList::FindPerson
                    142: //
                    143: CPersonList* CPersonList::FindPerson( const char * szTarget )
                    144: {
                    145:        ASSERT_VALID( this );
                    146:        
                    147:        CPersonList* pNewList = new CPersonList;
                    148:        CPerson* pNext = NULL;
                    149:        
                    150:        // Start at front of list
                    151:        POSITION pos = GetHeadPosition();
                    152: 
                    153:        // Iterate over whole list
                    154:        while( pos != NULL )
                    155:        {
                    156:                // Get next element (note cast)
                    157:                pNext = (CPerson*)GetNext(pos);
                    158:        
                    159:                // Add current element to new list if it matches
                    160:                if ( _strnicmp( pNext->GetLastName(), szTarget, strlen( szTarget ) )
                    161:                                 == 0 )
                    162:                        pNewList->AddTail(pNext);
                    163:        }
                    164:        
                    165:        if ( pNewList->IsEmpty() )
                    166:        {
                    167:                delete pNewList;
                    168:                pNewList = NULL;
                    169:        }
                    170:        
                    171:        return pNewList;
                    172: }
                    173: 
                    174: //////////////////////////////////////////
                    175: //  CPersonList::DeleteAll
                    176: //  This will delete the objects in the list as the pointers.
                    177: //
                    178: void CPersonList::DeleteAll()
                    179: {
                    180:        ASSERT_VALID( this );
                    181:        POSITION pos = GetHeadPosition();
                    182: 
                    183:        while( pos != NULL )
                    184:        {
                    185:                delete GetNext(pos);
                    186:        }
                    187:        RemoveAll();
                    188: }

unix.superglobalmegacorp.com

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