home *** CD-ROM | disk | FTP | other *** search
- // 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;
- }
-
- /////////////////////////////////////////////////////////////////////////////
-