Annotation of mstools/mfc/src/elements.h, revision 1.1

1.1     ! root        1: // This is a part of the Microsoft Foundation Classes C++ library. 
        !             2: // Copyright (C) 1992 Microsoft Corporation 
        !             3: // All rights reserved. 
        !             4: //  
        !             5: // This source code is only intended as a supplement to the 
        !             6: // Microsoft Foundation Classes Reference and Microsoft 
        !             7: // QuickHelp documentation provided with the library. 
        !             8: // See these sources for detailed information regarding the 
        !             9: // Microsoft Foundation Classes product. 
        !            10: 
        !            11: // Collection implementation helpers
        !            12: 
        !            13: /*
        !            14: * The short story:
        !            15: *   this file contains inline functions that make up the building blocks
        !            16: *   for implementing the string versions of standard parameterized
        !            17: *   collection shapes
        !            18: *
        !            19: * The long story:
        !            20: *   Because the implementation of collection classes moves objects around
        !            21: *   in various ways, it is very inefficient to use only generic C++ constructs.
        !            22: *   For example, in order to grow an array of FOO objects by one element,
        !            23: *   you would be forced to allocate a new array of appropriate size, calling
        !            24: *   the FOO constructor on every element.  Then copy the original array, element
        !            25: *   by element using a possibly overloaded assignment operator.  Finally destroy
        !            26: *   the original array element by element.
        !            27: *   For built-in data types (WORD, DWORD, pointer types), this is complete
        !            28: *   overkill.  For non-trivial classes (eg: CString in particular) this is
        !            29: *   a terrible implementation.
        !            30: *   
        !            31: *   The bottom line: we have to have special routines for doing construction
        !            32: *   and destruction of arrays of special elements - in particular CStrings.
        !            33: *   The standard templates are parameterized on 'HAS_CREATE' which is
        !            34: *   non-zero if the collection implementation requires a special
        !            35: *   construct and destruct function.
        !            36: * 
        !            37: *   Please note that these are inline overloaded operators, and do not have
        !            38: *   any form of runtime polymorphism (i.e. nothing is 'virtual').
        !            39: */
        !            40: 
        !            41: /////////////////////////////////////////////////////////////////////////////
        !            42: // Special implementations for CStrings
        !            43: // it is faster to bit-wise copy a CString than to call an official
        !            44: //   constructor - since an empty CString can be bit-wise copied
        !            45: 
        !            46: extern const CString NEAR afxEmptyString;
        !            47: 
        !            48: static inline void ConstructElement(CString* pNewData)
        !            49: {
        !            50:        memcpy(pNewData, &afxEmptyString, sizeof(CString));
        !            51: }
        !            52: 
        !            53: static inline void DestructElement(CString* pOldData)
        !            54: {
        !            55:        pOldData->Empty();
        !            56: }
        !            57: 
        !            58: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

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