home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
mfc
/
src
/
elements.h
< prev
next >
Wrap
Text File
|
1998-06-16
|
2KB
|
62 lines
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
// Collection implementation helpers
/*
* The short story:
* this file contains inline functions that make up the building blocks
* for implementing the string versions of standard parameterized
* collection shapes
*
* The long story:
* Because the implementation of collection classes moves objects around
* in various ways, it is very inefficient to use only generic C++ constructs.
* For example, in order to grow an array of FOO objects by one element,
* you would be forced to allocate a new array of appropriate size, calling
* the FOO constructor on every element. Then copy the original array, element
* by element using a possibly overloaded assignment operator. Finally destroy
* the original array element by element.
* For built-in data types (WORD, DWORD, pointer types), this is complete
* overkill. For non-trivial classes (eg: CString in particular) this is
* a terrible implementation.
*
* The bottom line: we have two special routines for doing construction
* and destruction of arrays of special elements - in particular CStrings.
* The standard templates are parameterized on 'HAS_CREATE' which is
* non-zero if the collection implementation requires a special
* construct and destruct function.
*
* Please note that these are inline overloaded operators, and do not have
* any form of runtime polymorphism (i.e. nothing is 'virtual').
*/
/////////////////////////////////////////////////////////////////////////////
// Special implementations for CStrings
// it is faster to bit-wise copy a CString than to call an official
// constructor - since an empty CString can be bit-wise copied
static inline void ConstructElement(CString* pNewData)
{
memcpy(pNewData, &afxEmptyString, sizeof(CString));
}
static inline void DestructElement(CString* pOldData)
{
pOldData->~CString();
}
static inline void CopyElement(CString* pSrc, CString* pDest)
{
*pSrc = *pDest;
}
/////////////////////////////////////////////////////////////////////////////