home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / iconnect.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  25.4 KB  |  868 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. #ifndef _ICONNECT_H
  19. #define _ICONNECT_H
  20.  
  21. #include <iglobals.h>
  22.  
  23. #pragma info (nocls, nocnd, nocns, nocnv, noext, nognr, novft)
  24. #pragma pack (4)
  25.  
  26. #define IInheritFrom(impl)\
  27.   typedef ICursorImpl ICursor;\
  28.   typedef IACollectionImpl IACollection;\
  29.   typedef impl::ImplType Inherited;\
  30.   typedef impl::ElementType ElementType;\
  31.   typedef impl::KeyType KeyType
  32.  
  33. #define IOverride(func) IOverride_##func
  34.  
  35. #define IInherited(func) IInherited_##func
  36.  
  37. #define IOverride_add\
  38.   IBoolean Add (void const* e, ICursorImpl& c)\
  39.   { return add (*(ElementType const*)e, c); }
  40.  
  41. #define IInherited_add(e,c)\
  42.   Inherited::Add (&e, c)
  43.  
  44. #define IOverride_addAllFrom\
  45.   void AddAllFrom (IACollectionImpl const& c)\
  46.   { addAllFrom (c); }
  47.  
  48. #define IInherited_addAllFrom(c)\
  49.   Inherited::AddAllFrom (c)
  50.  
  51. #define IOverride_addAsFirst\
  52.   void AddAsFirst (void const* e, ICursorImpl& c)\
  53.   { addAsFirst (*(ElementType const*)e, c); }
  54.  
  55. #define IInherited_addAsFirst(e,c)\
  56.   Inherited::AddAsFirst (&e, c)
  57.  
  58. #define IOverride_addAsLast\
  59.   void AddAsLast (void const* e, ICursorImpl& c)\
  60.   { addAsLast (*(ElementType const*)e, c); }
  61.  
  62. #define IInherited_addAsLast(e,c)\
  63.   Inherited::AddAsLast (&e, c)
  64.  
  65. #define IOverride_addAsNext\
  66.   void AddAsNext (void const* e, ICursorImpl& c)\
  67.   { addAsNext (*(ElementType const*)e, c); }
  68.  
  69. #define IInherited_addAsNext(e,c)\
  70.   Inherited::AddAsNext (&e, c)
  71.  
  72. #define IOverride_addAsPrevious\
  73.   void AddAsPrevious (void const* e, ICursorImpl& c)\
  74.   { addAsPrevious (*(ElementType const*)e, c); }
  75.  
  76. #define IInherited_addAsPrevious(e,c)\
  77.   Inherited::AddAsPrevious (&e, c)
  78.  
  79. #define IOverride_addAtPosition\
  80.   void AddAtPosition (IPosition p, void const* e, ICursorImpl& c)\
  81.   { addAtPosition (p, *(ElementType const*)e, c); }
  82.  
  83. #define IInherited_addAtPosition(p,e,c)\
  84.   Inherited::AddAtPosition (p, &e, c)
  85.  
  86. #define IOverride_addDifference(t)\
  87.   typedef IA##t##Impl IA##t;\
  88.   void AddDifference (IA##t const& c1, IA##t const& c2)\
  89.   { addDifference (c1, c2); }
  90.  
  91. #define IInherited_addDifference(c1,c2)\
  92.   Inherited::AddDifference (c1, c2)
  93.  
  94. #define IOverride_addIntersection(t)\
  95.   typedef IA##t##Impl IA##t;\
  96.   void AddIntersection (IA##t const& c1, IA##t const& c2)\
  97.   { addIntersection (c1, c2); }
  98.  
  99. #define IInherited_addIntersection(c1,c2)\
  100.   Inherited::AddIntersection (c1, c2)
  101.  
  102. #define IOverride_addOrReplaceElementWithKey\
  103.   IBoolean AddOrReplaceElementWithKey (void const* e, ICursorImpl& c)\
  104.   { return addOrReplaceElementWithKey (*(ElementType const*)e, c); }
  105.  
  106. #define IInherited_addOrReplaceElementWithKey(e,c)\
  107.   Inherited::AddOrReplaceElementWithKey (&e, c)
  108.  
  109. #define IOverride_addUnion(t)\
  110.   typedef IA##t##Impl IA##t;\
  111.   void AddUnion (IA##t const& c1, IA##t const& c2)\
  112.   { addUnion (c1, c2); }
  113.  
  114. #define IInherited_addUnion(c1,c2)\
  115.   Inherited::AddUnion (c1, c2)
  116.  
  117. #define IOverride_allElementsDo\
  118.   IBoolean AllElementsDo (IApplFunc f, void* a)\
  119.   { return allElementsDo\
  120.      ((IBoolean (*) (ElementType const&, void*)f, a); }
  121.  
  122. #define IInherited_allElementsDo(f,a)\
  123.   Inherited::AllElementsDo ((IApplFunc)f, a)
  124.  
  125. #define IOverride_anyElement\
  126.   void* Any () const\
  127.   { return (void*)& anyElement (); }
  128.  
  129. #define IInherited_anyElement()\
  130.   Inherited::Any ()
  131.  
  132. #define IOverride_compare(t)\
  133.   typedef IA##t##Impl IA##t;\
  134.   void Compare (IA##t const& c, ICompFunc f)\
  135.   { return compare (c, f); }
  136.  
  137. #define IInherited_compare(c,f)\
  138.   Inherited::Compare (c,f)
  139.  
  140. #define IOverride_contains\
  141.   IBoolean Contains (void const* e) const\
  142.   { return contains (*(ElementType const*)e); }
  143.  
  144. #define IInherited_contains(e)\
  145.   Inherited::Contains (&e)
  146.  
  147. #define IOverride_containsAllFrom\
  148.   IBoolean ContainsAllFrom (IACollectionImpl const& c) const\
  149.   { return containsAllFrom (c); }
  150.  
  151. #define IInherited_containsAllFrom(c)\
  152.   Inherited::ContainsAllFrom (c)
  153.  
  154. #define IOverride_containsAllKeysFrom\
  155.   IBoolean ContainsAllKeysFrom (IACollectionImpl const& c) const\
  156.   { return containsAllKeysFrom (c); }
  157.  
  158. #define IInherited_containsAllKeysFrom(c)\
  159.   Inherited::ContainsAllKeysFrom (c)
  160.  
  161. #define IOverride_containsElementWithKey\
  162.   IBoolean ContainsElementWithKey (void const* k) const\
  163.   { return containsElementWithKey (*(KeyType const*)k); }
  164.  
  165. #define IInherited_containsElementWithKey(k)\
  166.   Inherited::ContainsElementWithKey (&k)
  167.  
  168. #define IOverride_copy\
  169.   IBoolean Copy (IACollectionImpl const& c)\
  170.   { return copy (c); }
  171.  
  172. #define IInherited_copy(c)\
  173.   Inherited::Copy (c)
  174.  
  175. #define IOverride_dequeue\
  176.   void RemoveFirst (void* e)\
  177.   { dequeue (*(ElementType*)e); }
  178.  
  179. #define IInherited_dequeue(e)\
  180.   Inherited::RemoveFirst (&e)
  181.  
  182. #define IOverride_differenceWith(t)\
  183.   typedef IA##t##Impl IA##t;\
  184.   void Difference (IA##t const& c1, IA##t const& c2)\
  185.   { differenceWith (c1, c2); }
  186.  
  187. #define IInherited_differenceWith(c1,c2)\
  188.   Inherited::Difference (c1, c2)
  189.  
  190. #define IOverride_elementAt\
  191.   void* ElementAt (ICursorImpl const& c) const\
  192.   { return (void*)& elementAt (c); }
  193.  
  194. #define IInherited_elementAt(c)\
  195.   Inherited::ElementAt (c)
  196.  
  197. #define IOverride_elementAtPosition\
  198.   void* ElementAtPosition (IPosition p) const\
  199.   { return (void*)& elementAtPosition (p); }
  200.  
  201. #define IInherited_elementAtPosition(p)\
  202.   Inherited::ElementAtPosition (p)
  203.  
  204. #define IOverride_elementWithKey\
  205.   void* ElementAt (void const* k) const\
  206.   { return (void*)& elementWithKey (*(KeyType const*)k); }
  207.  
  208. #define IInherited_elementWithKey(k)\
  209.   Inherited::ElementWithKey (&k)
  210.  
  211. #define IOverride_enqueue\
  212.   void Add (void const* e, ICursorImpl& c) const\
  213.   { enqueue (*(ElementType const*)e, c); }
  214.  
  215. #define IInherited_enqueue(e,c)\
  216.   Inherited::Add (&e,c)
  217.  
  218. #define IOverride_firstElement\
  219.   void* First () const\
  220.   { return (void*)& firstElement (); }
  221.  
  222. #define IInherited_firstElement()\
  223.   Inherited::First ()
  224.  
  225. #define IOverride_intersectionWith(t)\
  226.   typedef IA##t##Impl IA##t;\
  227.   void Intersection (IA##t const& c1, IA##t const& c2)\
  228.   { intersectionWith (c1, c2); }
  229.  
  230. #define IInherited_intersectionWith(c1,c2)\
  231.   Inherited::Intersection (c1, c2)
  232.  
  233. #define IOverride_isEmpty\
  234.   IBoolean IsEmpty () const\
  235.   { return isEmpty (); }
  236.  
  237. #define IInherited_isEmpty()\
  238.   Inherited::IsEmpty ()
  239.  
  240. #define IOverride_isFirst\
  241.   IBoolean IsFirstAt (ICursorImpl const& c) const\
  242.   { return isFirst (c); }
  243.  
  244. #define IInherited_isFirst(c)\
  245.   Inherited::IsFirstAt (c)
  246.  
  247. #define IOverride_isFull\
  248.   IBoolean IsFull () const\
  249.   { return isFull (); }
  250.  
  251. #define IInherited_isFull()\
  252.   Inherited::IsFull ()
  253.  
  254. #define IOverride_isLast\
  255.   IBoolean IsLastAt (ICursorImpl const& c) const\
  256.   { return isLast (c); }
  257.  
  258. #define IInherited_isLast(c)\
  259.   Inherited::IsLastAt (c)
  260.  
  261. #define IOverride_key\
  262.   void* Key (void const* e) const\
  263.   { return (void*)& key (*(ElementTpye const*)e); }
  264.  
  265. #define IInherited_key(e)\
  266.   Inherited::Key (&e)
  267.  
  268. #define IOverride_lastElement\
  269.   void* Last () const\
  270.   { return (void*)& lastElement (); }
  271.  
  272. #define IInherited_lastElement()\
  273.   Inherited::Last ()
  274.  
  275. #define IOverride_locate\
  276.   IBoolean Locate (void const* e, ICursorImpl& c)\
  277.   { return locate (*(ElementType const*)e, c); }
  278.  
  279. #define IInherited_locate(e,c)\
  280.   Inherited::Locate (&e,c)
  281.  
  282. #define IOverride_locateElementWithKey\
  283.   IBoolean LocateElementWithKey (void const* k, ICursorImpl& c)\
  284.   { return locateElementWithKey (*(KeyType const*)k, c); }
  285.  
  286. #define IInherited_locateElementWithKey(k,c)\
  287.   Inherited::LocateElementWithKey (&k,c)
  288.  
  289. #define IOverride_locateFirst\
  290.   IBoolean LocateFirst (void const* e, ICursorImpl& c)\
  291.   { return locateFirst (*(ElementType const*)e, c); }
  292.  
  293. #define IInherited_locateFirst(e,c)\
  294.   Inherited::LocateFirst (&e,c)
  295.  
  296. #define IOverride_locateLast\
  297.   IBoolean LocateLast (void const* e, ICursorImpl& c)\
  298.   { return locateLast (*(ElementType const*)e, c); }
  299.  
  300. #define IInherited_locateLast(e,c)\
  301.   Inherited::LocateLast (&e,c)
  302.  
  303. #define IOverride_locateNext\
  304.   IBoolean LocateNext (void const* e, ICursorImpl& c)\
  305.   { return locateNext (*(ElementType const*)e, c); }
  306.  
  307. #define IInherited_locateNext(e,c)\
  308.   Inherited::LocateNext (&e,c)
  309.  
  310. #define IOverride_locateNextElementWithKey\
  311.   IBoolean LocateNextElementWithKey (void const* e, ICursorImpl& c)\
  312.   { return locateNextElementWithKey (*(ElementType const*)e, c); }
  313.  
  314. #define IInherited_locateNextElementWithKey(k,c)\
  315.   Inherited::LocateNetxElementWithKey (&k,c)
  316.  
  317. #define IOverride_locateOrAdd\
  318.   IBoolean LocateOrAdd (void const* e, ICursorImpl& c)\
  319.   { return locateOrAdd (*(ElementType const*)e, c); }
  320.  
  321. #define IInherited_locateOrAdd(e,c)\
  322.   Inherited::LocateOrAdd (&e,c)
  323.  
  324. #define IOverride_locateOrAddElementWithKey\
  325.   IBoolean LocateOrAddElementWithKey (void const* e, ICursorImpl& c)\
  326.   { return locateOrAddElementWithKey\
  327.       (*(ElementType const*)Element, c); }
  328.  
  329. #define IInherited_locateOrAddElementWithKey(e,c)\
  330.   Inherited::LocateOrAddElementWithKey (&e,c)
  331.  
  332. #define IOverride_locatePrevious\
  333.   IBoolean LocatePrevious (void const* e, ICursorImpl& c)\
  334.   { return locatePrevious (*(ElementType const*)e, c); }
  335.  
  336. #define IInherited_locatePrevious(e,c)\
  337.   Inherited::LocatePrevious (&e,c)
  338.  
  339. #define IOverride_maxNumberOfElements\
  340.   INumber MaxNumberOfElements () const\
  341.   { return maxNumberOfElements (); }
  342.  
  343. #define IInherited_maxNumberOfElements()\
  344.   Inherited::MaxNumberOfElements ()
  345.  
  346. #define IOverride_newCursor\
  347.   Cursor* CreateCursor () const\
  348.   { return newCursor (); }
  349.  
  350. #define IInherited_newCursor()\
  351.   Inherited::CreateCursor ()
  352.  
  353. #define IOverride_numberOfDifferentElements\
  354.   INumber NumberOfDifferentElements () const\
  355.   { return numberOfDifferentElements (); }
  356.  
  357. #define IInherited_numberOfDifferentElements()\
  358.   Inherited::NumberOfDifferentElements ()
  359.  
  360. #define IOverride_numberOfDifferentKeys\
  361.   INumber NumberOfDifferentKeys () const\
  362.   { return numberOfDifferentKeys (); }
  363.  
  364. #define IInherited_numberOfDifferentKeys()\
  365.   Inherited::NumberOfDifferentKeys ()
  366.  
  367. #define IOverride_numberOfElements\
  368.   INumber NumberOfElements () const\
  369.   { return numberOfElements (); }
  370.  
  371. #define IInherited_numberOfElements()\
  372.   Inherited::NumberOfElements ()
  373.  
  374. #define IOverride_numberOfElementsWithKey\
  375.   INumber NumberOfElementsWithKey (void const* k) const\
  376.   { return numberOfElementsWithKey (*(KeyType const*)k); }
  377.  
  378. #define IInherited_numberOfElementsWithKey(k)\
  379.   Inherited::NumberOfElementsWithKey (&k)
  380.  
  381. #define IOverride_numberOfOccurrences\
  382.   INumber NumberOfOccurrences (void const* e) const\
  383.   { return numberOfOccurrences (*(ElementType const*)e); }
  384.  
  385. #define IInherited_numberOfOccurrences(e)\
  386.   Inherited::NumberOfOccurrences (&e)
  387.  
  388. #define IOverride_pop\
  389.   void RemoveLast (void* e)\
  390.   { pop (*(ElementType*)e); }
  391.  
  392. #define IInherited_pop(e)\
  393.   Inherited::RemoveLast (&e)
  394.  
  395. #define IOverride_positionAt\
  396.   IPosition PositionAt (ICursorImpl const& c) const\
  397.   { return positionAt (c); }
  398.  
  399. #define IInherited_positionAt(c)\
  400.   Inherited::PositionAt (c)
  401.  
  402. #define IOverride_push\
  403.   void Add (void const* e, ICursorImpl& c) const\
  404.   { push (*(ElementType const*)e, c); }
  405.  
  406. #define IInherited_push(e,c)\
  407.   Inherited::Add (&e,c)
  408.  
  409. #define IOverride_remove\
  410.   IBoolean Remove (void const* e)\
  411.   { return remove (*(ElementType const*)e); }
  412.  
  413. #define IInherited_remove(e)\
  414.   Inherited::Remove (&e)
  415.  
  416. #define IOverride_removeAllElementsWithKey\
  417.   INumber RemoveAllElementsWithKey (void const* k)\
  418.   { return removeAllElementsWithKey (*(KeyType const*)k); }
  419.  
  420. #define IInherited_removeAllElementsWithKey(k)\
  421.   Inherited::RemoveAllElementsWithKey (&k)
  422.  
  423. #define IOverride_removeAllOccurrences\
  424.   IBoolean RemoveAllOccurrences (void const* e)\
  425.   { return removeAllOccurrences (*(ElementType const*)e); }
  426.  
  427. #define IInherited_removeAllOccurrences(e)\
  428.   Inherited::RemoveAllOccurrences (&e)
  429.  
  430. #define IOverride_removeAll\
  431.   INumber RemoveAll ()\
  432.   { return removeAll (); }
  433.  
  434. #define IInherited_removeAll()\
  435.   Inherited::RemoveAll ()
  436.  
  437. #define IOverride_removeAt\
  438.   void RemoveAt (ICursorImpl& c)\
  439.   { removeAt (c); }
  440.  
  441. #define IInherited_removeAt(c)\
  442.   Inherited::RemoveAt (c)
  443.  
  444. #define IOverride_removeAtPosition\
  445.   void RemoveAtPosition (IPosition p)\
  446.   { removeAtPosition (p); }
  447.  
  448. #define IInherited_removeAtPosition(p)\
  449.   Inherited::RemoveAtPosition (p)
  450.  
  451. #define IOverride_removeElementWithKey\
  452.   IBoolean RemoveElementWithKey (void const* k)\
  453.   { return removeElementWithKey (*(KeyType const*)k); }
  454.  
  455. #define IInherited_removeElementWithKey(k)\
  456.   Inherited::RemoveElementWithKey (&k)
  457.  
  458. #define IOverride_removeFirst\
  459.   void RemoveFirst ()\
  460.   { removeFirst (); }
  461.  
  462. #define IInherited_removeFirst()\
  463.   Inherited::RemoveFirst ()
  464.  
  465. #define IOverride_removeLast\
  466.   void RemoveLast ()\
  467.   { removeLast (); }
  468.  
  469. #define IInherited_removeLast()\
  470.   Inherited::RemoveLast ()
  471.  
  472. #define IOverride_replaceAt\
  473.   void ReplaceAt (ICursorImpl const& c, void const* e)\
  474.   { replaceAt (c, *(ElementType const*)e); }
  475.  
  476. #define IInherited_replaceAt(c,e)\
  477.   Inherited::ReplaceAt (c,&e)
  478.  
  479. #define IOverride_replaceElementWithKey\
  480.   void ReplaceElementWithKey (void const* e, ICursorImpl const& c)\
  481.   { replaceElementWithKey (*(ElementType const*)e, c); }
  482.  
  483. #define IInherited_replaceElementWithKey(e,c)\
  484.   Inherited::ReplaceElementWithKey (&e,c)
  485.  
  486. #define IOverride_setToFirst\
  487.   IBoolean SetToFirst (ICursorImpl& c) const\
  488.   { return setToFirst (c); }
  489.  
  490. #define IInherited_setToFirst(c)\
  491.   Inherited::SetToFirst (c)
  492.  
  493. #define IOverride_setToLast\
  494.   IBoolean SetToLast (ICursorImpl& c) const\
  495.   { return setToLast (c); }
  496.  
  497. #define IInherited_setToLast(c)\
  498.   Inherited::SetToLast (c)
  499.  
  500. #define IOverride_setToNext\
  501.   IBoolean SetToNext (ICursorImpl& c) const\
  502.   { return setToNext (c); }
  503.  
  504. #define IInherited_setToNext(c)\
  505.   Inherited::SetToNext (c)
  506.  
  507. #define IOverride_setToNextDifferentElement\
  508.   IBoolean SetToNextDifferentElement (ICursorImpl& c) const\
  509.   { return setToNextDifferentElement (c); }
  510.  
  511. #define IInherited_setToNextDifferentElement(c)\
  512.   Inherited::SetToNextDifferentElement (c)
  513.  
  514. #define IOverride_setToNextWithDifferentKey\
  515.   IBoolean SetToNextWithDifferentKey (ICursorImpl& c) const\
  516.   { return setToNextWithDifferentKey (c); }
  517.  
  518. #define IInherited_setToNextWithDifferentKey(c)\
  519.   Inherited::SetToNextWithDifferentKey (c)
  520.  
  521. #define IOverride_setToPosition\
  522.   void SetToPosition (IPosition p, ICursorImpl& c) const\
  523.   { setToPosition (p, c); }
  524.  
  525. #define IInherited_setToPosition(p,c)\
  526.   Inherited::SetToPosition (p,c)
  527.  
  528. #define IOverride_setToPrevious\
  529.   IBoolean SetToPrevious (ICursorImpl& c) const\
  530.   { return setToPrevious (c); }
  531.  
  532. #define IInherited_setToPrevious(c)\
  533.   Inherited::SetToPrevious (c)
  534.  
  535. #define IOverride_sort\
  536.   void Sort (ICompFunc f) const\
  537.   { return sort (long (*) (ElementType const&, ElementType const&)f); }
  538.  
  539. #define IInherited_sort(f)\
  540.   Inherited::Sort ((ICompFunc)f)
  541.  
  542. #define IOverride_unionWith(t)\
  543.   typedef IA##t##Impl IA##t;\
  544.   void Union (IA##t const& c1, IA##t const& c2)\
  545.   { unionWith (c1, c2); }
  546.  
  547. #define IInherited_unionWith(c1,c2)\
  548.   Inherited::Union (c1, c2)
  549.  
  550. #define IOverride_operatorEquality(t)\
  551.   typedef IA##t##Impl IA##t;\
  552.   IBoolean operator== (IA##t const& c)\
  553.   { return operator== (c); }
  554.  
  555. #define IInherited_operatorEquality(c)\
  556.   Inherited::operator== (c)
  557.  
  558. #define IConnect(if, impl, iif, e) \
  559.   typedef impl<Self::Instantiation> Implementation;\
  560.   iif##Typedef(e);\
  561.   if (INumber n = 100)\
  562.   : Self (*(Implementation*)*new Instantiation (n)) {}
  563.  
  564. #define IConnect_WithElementOps(if, impl, iif, e, eo) \
  565.   typedef impl<Self::Instantiation> Implementation;\
  566.   iif##Typedef(e, eo);\
  567.   if (INumber n = 100)\
  568.   : Self (*(Implementation*)*new Instantiation (n)) {}
  569.  
  570. #define IConnect_WithKey(if, impl, iif, e, k) \
  571.   typedef impl<Self::Instantiation> Implementation;\
  572.   iif##Typedef(e, k);\
  573.   if (INumber n = 100)\
  574.   : Self (*(Implementation*)*new Instantiation (n)) {}
  575.  
  576. #define IConnect_WithKeyAndElementOps(if, impl, iif, e, k, eo) \
  577.   typedef impl<Self::Instantiation> Implementation;\
  578.   iif##Typedef(e, k, eo);\
  579.   if (INumber n = 100)\
  580.   : Self (*(Implementation*)*new Instantiation (n)) {}
  581.  
  582. #define IImplOf(c) \
  583.   ((Implementation&)ImplOf (c))
  584.  
  585. // defines for tree member function
  586.  
  587. #define IInheritTreeFrom(impl)\
  588.   typedef ITreeCursorImpl ITreeCursor;\
  589.   typedef IATreeImpl IATree;\
  590.   typedef impl Inherited
  591.  
  592. #define IOverrideTree(func) IOverrideTree_##func
  593.  
  594. #define IInheritedTree(func) IInheritedTree_##func
  595.  
  596. #define IOverrideTree_addAsChild\
  597.   IBoolean AddAsChild (ITreeCursorImpl& c, IPosition p, void const* e)\
  598.   { return addAsChild (c, p, *(ElementType const*)e); }
  599.  
  600. #define IInherited_addAsChild(c,p,e)\
  601.   Inherited::AddAsChild (c, p, &e)
  602.  
  603. #define IOverrideTree_addAsRoot\
  604.   IBoolean AddAsRoot (void const* e)\
  605.   { return addAsRoot (*(ElementType const*)e); }
  606.  
  607. #define IInherited_addAsRoot(e)\
  608.   Inherited::AddAsRoot (&e)
  609.  
  610. #define IOverrideTree_allElementsDo\
  611.   IBoolean AllElementsDo (IApplFunc f, ITreeIterationOrder o, void* a)\
  612.   { return allElementsDo\
  613.      ((IBoolean (*) (ElementType const&, void*)f, o, a); }
  614.  
  615. #define IInheritedTree_allElementsDo(f,o,a)\
  616.   Inherited::AllElementsDo ((IApplFunc)f, o, a)
  617.  
  618. #define IOverrideTree_allSubtreeElementsDo\
  619.   IBoolean AllSubtreeElementsDo\
  620.     (ITreeCursorImpl const& c,IApplFunc f,\
  621.      ITreeIterationOrder o, void* a)\
  622.   { return allSubtreeElementsDo\
  623.      (c, (IBoolean (*) (ElementType const&, void*)f, o, a); }
  624.  
  625. #define IInheritedTree_allSubtreeElementsDo(f,o,a)\
  626.   Inherited::AllSubtreeElementsDo (c, (IApplFunc)f, o, a)
  627.  
  628. #define IOverrideTree_attachAsChild(t)\
  629.   typedef IA##t##Impl IA##t##;\
  630.   IBoolean AttachAsChild\
  631.     (ITreeCursorImpl& c, IPosition p, IA##t##Impl& tree)\
  632.   { return attachAsChild (c, p, tree); }
  633.  
  634. #define IInherited_attachAsChild(c,p,t)\
  635.   Inherited::AttachAsChild (c, p, t)
  636.  
  637. #define IOverrideTree_attachSubtreeAsChild(t)\
  638.   typedef IA##t##Impl IA##t##;\
  639.   IBoolean AttachSubtreeAsChild\
  640.     (ITreeCursorImpl& c1, IPosition p,\
  641.      IA##t##Impl& tree, ITreeCursorImpl const& c2)\
  642.   { return attachSubtreeAsChild (c1, p, tree, c2); }
  643.  
  644. #define IInherited_attachSubtreeAsChild(c1,p,t,c2)\
  645.   Inherited::AttachSubtreeAsChild (c1, p, t, c2)
  646.  
  647. #define IOverrideTree_attachAsRoot\
  648.   typedef IA##t##Impl IA##t##;\
  649.   IBoolean AttachAsRoot (IA##t##Impl& tree)\
  650.   { return attachAsRoot (tree); }
  651.  
  652. #define IInheritedTree_attachAsRoot(t)\
  653.   Inherited::AttachAsRoot (t)
  654.  
  655. #define IOverrideTree_attachSubtreeAsRoot\
  656.   typedef IA##t##Impl IA##t##;\
  657.   IBoolean AttachSubtreeAsRoot\
  658.     (IA##t##Impl& tree, ITreeCursrImpl const& c)\
  659.   { return attachSubtreeAsRoot (tree, c); }
  660.  
  661. #define IInheritedTree_attachSubtreeAsRoot(t,c)\
  662.   Inherited::AttachSubtreeAsRoot (t,c)
  663.  
  664. #define IOverride_childPositionAt\
  665.   IPosition ChildPositionAt (ICursorImpl const& c) const\
  666.   { return childPositionAt (c); }
  667.  
  668. #define IInherited_childPositionAt(c)\
  669.   Inherited::ChildPositionAt (c)
  670.  
  671. #define IOverrideTree_copy\
  672.   typedef IA##t##Impl IA##t##;\
  673.   IBoolean Copy (IA##t##Impl const& tree)\
  674.   { return copy (tree); }
  675.  
  676. #define IInheritedTree_copy(t)\
  677.   Inherited::Copy (t)
  678.  
  679. #define IOverrideTree_copySubtree\
  680.   typedef IA##t##Impl IA##t##;\
  681.   IBoolean CopySubtree\
  682.     (IA##t##Impl const& tree, ITreeCursrImpl const& c)\
  683.   { return copySubtree (tree, c); }
  684.  
  685. #define IInheritedTree_copySubtree(t,c)\
  686.   Inherited::CopySubtree (t,c)
  687.  
  688. #define IOverrideTree_elementAt\
  689.   void* ElementAt (ITreeCursorImpl const& c) const\
  690.   { return (void*)& elementAt (c); }
  691.  
  692. #define IInheritedTree_elementAt(c)\
  693.   Inherited::ElementAt (c)
  694.  
  695. #define IOverrideTree_hasChild\
  696.   IBoolean HasChild (IPosition p, ITreeCursorImpl const& c) const\
  697.   { return hasChild (p, c); }
  698.  
  699. #define IInheritedTree_hasChild(p,c)\
  700.   Inherited::HasChild (p, c)
  701.  
  702. #define IOverrideTree_isEmpty\
  703.   IBoolean IsEmpty () const\
  704.   { return isEmpty (); }
  705.  
  706. #define IInheritedTree_isEmpty()\
  707.   Inherited::IsEmpty ()
  708.  
  709. #define IOverrideTree_isLeaf\
  710.   IBoolean IsLeaf (ITreeCursor const& c) const\
  711.   { return isLeaf (c); }
  712.  
  713. #define IInheritedTree_isLeaf(c)\
  714.   Inherited::IsLeaf (c)
  715.  
  716. #define IOverrideTree_isRoot\
  717.   IBoolean IsRoot (ITreeCursor const& c) const\
  718.   { return isRoot (c); }
  719.  
  720. #define IInheritedTree_isRoot(c)\
  721.   Inherited::IsRoot (c)
  722.  
  723. #define IOverrideTree_newCursor\
  724.   Cursor* CreateCursor () const\
  725.   { return newCursor (); }
  726.  
  727. #define IInheritedTree_newCursor()\
  728.   Inherited::CreateCursor ()
  729.  
  730. #define IOverrideTree_numberOfChildren\
  731.   INumber NumberOfChildren () const\
  732.   { return numberOfChildren (); }
  733.  
  734. #define IInheritedTree_numberOfChildren()\
  735.   Inherited::NumberOfChildren ()
  736.  
  737. #define IOverrideTree_numberOfElements\
  738.   INumber NumberOfElements () const\
  739.   { return numberOfElements (); }
  740.  
  741. #define IInheritedTree_numberOfElements()\
  742.   Inherited::NumberOfElements ()
  743.  
  744. #define IOverrideTree_numberOfSubtreeElements\
  745.   INumber NumberOfSubtreeElements (ITreeCursorImpl const& c) const\
  746.   { return numberOfSubtreeElements (c); }
  747.  
  748. #define IInheritedTree_numberOfSubtreeElements(c)\
  749.   Inherited::NumberOfSubtreeElements (c)
  750.  
  751. #define IOverrideTree_numberOfLeaves\
  752.   INumber NumberOfLeaves () const\
  753.   { return numberOfLeaves (); }
  754.  
  755. #define IInheritedTree_numberOfLeaves()\
  756.   Inherited::NumberOfLeaves ()
  757.  
  758. #define IOverrideTree_numberOfSubtreeLeaves\
  759.   INumber NumberOfSubtreeLeaves (ITreeCursorImpl const& c) const\
  760.   { return numberOfSubtreeLeaves (c); }
  761.  
  762. #define IInheritedTree_numberOfSubtreeLeaves(c)\
  763.   Inherited::NumberOfSubtreeLeaves (c)
  764.  
  765. #define IOverrideTree_removeAll\
  766.   INumber RemoveAll ()\
  767.   { return removeAll (); }
  768.  
  769. #define IInheritedTree_removeAll()\
  770.   Inherited::RemoveAll ()
  771.  
  772. #define IOverrideTree_removeSubtree\
  773.   INumber RemoveSubtree (ITreeCursorImpl const& c) const\
  774.   { return removeSubtree (c); }
  775.  
  776. #define IInheritedTree_removeSubtree(c)\
  777.   Inherited::RemoveSubtree (c)
  778.  
  779. #define IOverrideTree_replaceAt\
  780.   void ReplaceAt (ITreeCursorImpl const& c, void const* e)\
  781.   { replaceAt (c, *(ElementType const*)e); }
  782.  
  783. #define IInheritedTree_replaceAt(c,e)\
  784.   Inherited::ReplaceAt (c,&e)
  785.  
  786. #define IOverrideTree_setToChild\
  787.   IBoolean SetToChild (IPosition p, ITreeCursorImpl& c) const\
  788.   { return setToChild (p, c); }
  789.  
  790. #define IInheritedTree_setToChild(p,c)\
  791.   Inherited::SetToChild (p, c)
  792.  
  793. #define IOverrideTree_setToFirst\
  794.   IBoolean SetToFirst (ITreeCursorImpl& c, ITreeIterationOrder o) const\
  795.   { return setToFirst (c, o); }
  796.  
  797. #define IInheritedTree_setToFirst(c,o)\
  798.   Inherited::SetToFirst (c, o)
  799.  
  800. #define IOverrideTree_setToFirstExistingChild\
  801.   IBoolean SetToFirstExistingChild (ITreeCursorImpl& c) const\
  802.   { return setToFirstExistingChild (c); }
  803.  
  804. #define IInheritedTree_setToFirstExistingChild(c)\
  805.   Inherited::SetToFirstExistingChild (c)
  806.  
  807. #define IOverrideTree_setToLast\
  808.   IBoolean SetToLast (ITreeCursorImpl& c, ITreeIterationOrder o) const\
  809.   { return setToLast (c, o); }
  810.  
  811. #define IInheritedTree_setToLast(c,o)\
  812.   Inherited::SetToLast (c, o)
  813.  
  814. #define IOverrideTree_setToLastExistingChild\
  815.   IBoolean SetToLastExistingChild (ITreeCursorImpl& c) const\
  816.   { return setToLastExistingChild (c); }
  817.  
  818. #define IInheritedTree_setToLastExistingChild(c)\
  819.   Inherited::SetToLastExistingChild (c)
  820.  
  821. #define IOverrideTree_setToNext\
  822.   IBoolean SetToNext (ITreeCursorImpl& c, ITreeIterationOrder o) const\
  823.   { return setToNext (c, o); }
  824.  
  825. #define IInheritedTree_setToNext(c,o)\
  826.   Inherited::SetToNext (c, o)
  827.  
  828. #define IOverrideTree_setToNextExistingChild\
  829.   IBoolean SetToNextExistingChild (ITreeCursorImpl& c) const\
  830.   { return setToNextExistingChild (c); }
  831.  
  832. #define IInheritedTree_setToNextExistingChild(c)\
  833.   Inherited::SetToNextExistingChild (c)
  834.  
  835. #define IOverrideTree_setToParent\
  836.   IBoolean SetToParent (ITreeCursorImpl& c) const\
  837.   { return setToParent (c); }
  838.  
  839. #define IInheritedTree_setToParent(c)\
  840.   Inherited::SetToParent (c)
  841.  
  842. #define IOverrideTree_setToPrevious\
  843.   IBoolean SetToPrevious\
  844.     (ITreeCursorImpl& c, ITreeIterationOrder o) const\
  845.   { return setToPrevious (c, o); }
  846.  
  847. #define IInheritedTree_setToPrevious(c,o)\
  848.   Inherited::SetToPrevious (c, o)
  849.  
  850. #define IOverrideTree_setToPreviousExistingChild\
  851.   IBoolean SetToPreviousExistingChild (ITreeCursorImpl& c) const\
  852.   { return setToPreviousExistingChild (c); }
  853.  
  854. #define IInheritedTree_setToPreviousExistingChild(c)\
  855.   Inherited::SetToPreviousExistingChild (c)
  856.  
  857. #define IOverrideTree_setToRoot\
  858.   IBoolean SetToRoot (ITreeCursorImpl& c) const\
  859.   { return setToRoot (c); }
  860.  
  861. #define IInheritedTree_setToRoot(c)\
  862.   Inherited::SetToRoot (c)
  863.  
  864. #pragma info (restore)
  865. #pragma pack ()
  866.  
  867. #endif
  868.