home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / iikssavl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  6.4 KB  |  191 lines

  1. /**********************************************************************
  2. *                                                                     *
  3. *  IBM(R) VisualAge(TM) for C++ for Windows(R), Version 3.5           *
  4. *                                                                     *
  5. *  PID: 5622-880                                                      *
  6. *  - Licensed Material - Program-Property of IBM                      *
  7. *  (C) Copyright IBM Corp. 1991, 1995 - All Right Reserved.           *
  8. *                                                                     *
  9. *  US Government Users Restricted Rights - Use, duplication or        *
  10. *  disclosure restricted by GSA ADP Schedule Contract with IBM Corp.  *
  11. *                                                                     *
  12. *  VisualAge, and IBM are trademarks or registered trademarks of      *
  13. *  International Business Machines Corporation.                       *
  14. *  Windows is a registered trademark of Microsoft Corporation.        *
  15. *                                                                     *
  16. **********************************************************************/
  17.  
  18. #include <new.h>
  19.  
  20. #pragma info (nocls, nocnd, nocns, nocnv, noext, nognr, novft)
  21. #pragma pack (4)
  22.  
  23. // -------------------------
  24. // IKeySortedSetAsAvlTreeOps
  25. // -------------------------
  26.  
  27. // public members
  28.  
  29. template <class Element, class Key,
  30.           class ElementOps, class Implementation>
  31. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  32. IKeySortedSetAsAvlTreeOps (INumber numberOfElements)
  33. : Inherited (__isDTSClass (Element)),
  34.   ivElementOps (),
  35.   ivImpl (*this, numberOfElements)
  36. {
  37. }
  38.  
  39. template <class Element, class Key,
  40.           class ElementOps, class Implementation>
  41. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  42. IKeySortedSetAsAvlTreeOps (INumber numberOfElements, void* opsArg)
  43. : Inherited (__isDTSClass (Element)),
  44.   ivElementOps (opsArg),
  45.   ivImpl (*this, numberOfElements)
  46. {
  47. }
  48.  
  49. template <class Element, class Key,
  50.           class ElementOps, class Implementation>
  51. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  52. IKeySortedSetAsAvlTreeOps
  53.   (IKeySortedSetAsAvlTreeOps
  54.     <Element, Key, ElementOps, Implementation> const& collection)
  55. : Inherited (__isDTSClass (Element)),
  56.   ivElementOps (collection.ivElementOps),
  57.   ivImpl (*this, collection.ivImpl)
  58. {
  59. }
  60.  
  61. template <class Element, class Key,
  62.           class ElementOps, class Implementation>
  63. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  64. ~IKeySortedSetAsAvlTreeOps ()
  65. {
  66. }
  67.  
  68. template <class Element, class Key,
  69.           class ElementOps, class Implementation>
  70. void
  71. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  72. Assign (void* element1, void const* element2) const
  73. { ivElementOps.Assign (*(Element*)element1, *(Element const*)element2);
  74. }
  75.  
  76. template <class Element, class Key,
  77.           class ElementOps, class Implementation>
  78. IACollectionImpl*
  79. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  80. Clone () const
  81. { return (Implementation*) *new Self (*this);
  82. }
  83.  
  84. template <class Element, class Key,
  85.           class ElementOps, class Implementation>
  86. long
  87. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  88. CompareKeys (void const* arg1, void const* arg2, IArgType argType) const
  89. { long comp = 0;
  90.   switch (argType) {
  91.     case kElementElement: {
  92.       comp = ivElementOps.keyOps.Compare
  93.         (ivElementOps.Key (*(Element const*)arg1),
  94.          ivElementOps.Key (*(Element const*)arg2));
  95.       break;
  96.     }
  97.     case kElementKey: {
  98.       comp = ivElementOps.keyOps.Compare
  99.         (ivElementOps.Key (*(Element const*)arg1),
  100.          IKeyForOps ((Key const*)arg2));
  101.       break;
  102.     }
  103.     case kKeyKey: {
  104.       comp = ivElementOps.keyOps.Compare
  105.         (IKeyForOps ((Key const*)arg1), IKeyForOps ((Key const*)arg2));
  106.     }
  107.   }
  108.   return comp;
  109. }
  110.  
  111. template <class Element, class Key,
  112.           class ElementOps, class Implementation>
  113. void*
  114. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  115. CreateNode (void const* element) const
  116. { void* node = ivElementOps.Allocate (sizeof (Node)
  117. #if defined (__DEBUG_ALLOC__)
  118.                                       ,__FILE__, __LINE__
  119. #endif
  120.                                      );
  121.   return new (ivImpl.CheckPointer (node))
  122.     Node (*(Element const*)element);
  123. }
  124.  
  125. template <class Element, class Key,
  126.           class ElementOps, class Implementation>
  127. void
  128. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  129. DeleteNode (void* node) const
  130. { ((Node*)node)->~Node ();
  131.   ivElementOps.Deallocate (node
  132. #if defined (__DEBUG_ALLOC__)
  133.                            , __FILE__, __LINE__
  134. #endif
  135.                           );
  136. }
  137.  
  138. template <class Element, class _Key,
  139.           class ElementOps, class Implementation>
  140. void*
  141. IKeySortedSetAsAvlTreeOps <Element, _Key, ElementOps, Implementation>::
  142. Key (void const* element) const
  143. { return IKeyFromOps
  144.     (ivElementOps.Key (*(Element const*)element));
  145. }
  146.  
  147. template <class Element, class Key,
  148.           class ElementOps, class Implementation>
  149. void*
  150. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  151. StreamIn (TStream& fromWhere) const
  152. { Element* element = ivElementOps.GetStreamable ();
  153.   ivElementOps.StreamIn (*element, fromWhere);
  154.   return (void*) element;
  155. }
  156.  
  157. template <class Element, class Key,
  158.           class ElementOps, class Implementation>
  159. void
  160. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  161. StreamOut (void const* element, TStream& toWhere) const
  162. { ivElementOps.StreamOut (*(Element const*)element, toWhere);
  163. }
  164.  
  165. template <class Element, class Key,
  166.           class ElementOps, class Implementation>
  167. TStream&
  168. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  169. operator<<= (TStream& fromWhere)
  170. { return (ivElementOps <<= fromWhere);
  171. }
  172.  
  173. template <class Element, class Key,
  174.           class ElementOps, class Implementation>
  175. TStream&
  176. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  177. operator>>= (TStream& toWhere) const
  178. { return (ivElementOps >>= toWhere);
  179. }
  180.  
  181. template <class Element, class Key,
  182.           class ElementOps, class Implementation>
  183. IKeySortedSetAsAvlTreeOps <Element, Key, ElementOps, Implementation>::
  184. operator Implementation* ()
  185. { ivImpl.CheckPointer (this);
  186.   return &ivImpl;
  187. }
  188.  
  189. #pragma info (restore)
  190. #pragma pack ()
  191.