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 >
Text File  |  1998-06-16  |  2KB  |  62 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 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 related
  7. // electronic 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 two 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. static inline void ConstructElement(CString* pNewData)
  47. {
  48.     memcpy(pNewData, &afxEmptyString, sizeof(CString));
  49. }
  50.  
  51. static inline void DestructElement(CString* pOldData)
  52. {
  53.     pOldData->~CString();
  54. }
  55.  
  56. static inline void CopyElement(CString* pSrc, CString* pDest)
  57. {
  58.     *pSrc = *pDest;
  59. }
  60.  
  61. /////////////////////////////////////////////////////////////////////////////
  62.