home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / macros / element.tde < prev    next >
Encoding:
Text File  |  1996-02-22  |  4.7 KB  |  141 lines

  1. <code _ELEMENT_TDE_>
  2. --
  3. -- Define the class skeleton for Element type
  4. --
  5. <include e_user.tde>
  6. --
  7. --
  8. <code DEFINE_ELEMENT>
  9. --
  10. $E_NAME_DEFS$\<>
  11. --
  12.  
  13. class $ELEMENT_CLASS$
  14. {
  15. //-----------------------------------------------------------------------------
  16. // Required members for element type
  17. //-----------------------------------------------------------------------------
  18. public:
  19. <if ($DEFAULT_CONSTRUCTOR$)>
  20.      //------------------------------------------------------------------------
  21.      // Default constructor
  22.      //------------------------------------------------------------------------
  23.      $ELEMENT_CLASS$()
  24. <   >$E_DEF_CONSTR_BODY$
  25. </if>
  26. <if ($COPY_CONSTRUCTOR$)>
  27.      //------------------------------------------------------------------------
  28.      // Copy constructor
  29.      //------------------------------------------------------------------------
  30.      $ELEMENT_CLASS$($ELEMENT_CLASS$ const& a$ELEMENT_CLASS$)
  31. <   >$E_COPY_CONSTR_BODY$
  32. </if>
  33. <if ($ASSIGNMENT$)>
  34.      //------------------------------------------------------------------------
  35.      // Assignment operator
  36.      //------------------------------------------------------------------------
  37.      $ELEMENT_CLASS$& operator = ($ELEMENT_CLASS$ const& a$ELEMENT_CLASS$)
  38. <   >$E_ASSIGN_BODY$
  39. </if>
  40. <if ($EQUALITY$)>
  41.      //------------------------------------------------------------------------
  42.      // Equality test
  43.      //------------------------------------------------------------------------
  44.      IBoolean operator== ($ELEMENT_CLASS$ const& a$ELEMENT_CLASS$) const
  45. <   >$E_EQUAL_BODY$
  46. </if>
  47. <if ($ORDERING$)>
  48.      //------------------------------------------------------------------------
  49.      // Ordering relation between $ELEMENT_CLASS$ objects.
  50.      //------------------------------------------------------------------------
  51.      IBoolean operator< ($ELEMENT_CLASS$ const& a$ELEMENT_CLASS$) const
  52. <   >$E_ORDER_BODY$
  53. </if>
  54. //-----------------------------------------------------------------------------
  55. // Additional members (customization)
  56. //-----------------------------------------------------------------------------
  57. $E_CUSTOMIZATION$\<>
  58.  
  59. }; // End of class $ELEMENT_CLASS$
  60. <if ($HASH_FUNCTION$)>
  61.  
  62. $DEFINE_E_HASH$\<>
  63. </if>
  64. <if (($ELEMENT_PTR$) & ($ORDERING$)) >
  65.  
  66. //-----------------------------------------------------------------------------
  67. // Define a comparison function
  68. //-----------------------------------------------------------------------------
  69. inline long compare($ELEMENT_TYPE$ const& e1, $ELEMENT_TYPE$ const& e2)
  70. {
  71.    if      (*e1 < *e2) return -1;
  72.    else if (*e2 < *e1) return 1;
  73.    else                return 0;
  74. }
  75. </if>
  76. <if (($ELEMENT_PTR$) & ($EQUALITY$)) >
  77.  
  78. //-----------------------------------------------------------------------------
  79. // Need an equality function
  80. //-----------------------------------------------------------------------------
  81. inline IBoolean equal($ELEMENT_TYPE$ const& e1, $ELEMENT_TYPE$ const& e2)
  82. {
  83.    return (*e1 == *e2);
  84. }
  85. </if>
  86. </code DEFINE_ELEMENT>
  87.  
  88.  
  89. <code DEFINE_E_HASH>
  90. //-----------------------------------------------------------------------------
  91. // Need a hash function for the element type
  92. //-----------------------------------------------------------------------------
  93. inline unsigned long hash($ELEMENT_TYPE$ const& a$ELEMENT_CLASS$, unsigned long hashInput)
  94. <if ($USER_DEFINED_ELEMENT$)>
  95. $HASH_BODY$
  96. <else>\<if ($ELEMENT_PTR$)>
  97. -- When element type is pointer to predefined type,
  98. -- do hashing on the actual value
  99. {
  100.      \<if ($NUMERIC_TYPE$)>
  101.    return hash(*a$ELEMENT_CLASS$, hashInput);
  102.      \<else>
  103.    return hash((char const*)*a$ELEMENT_CLASS$, hashInput);
  104.      \</if>
  105. }
  106. </if>\</if>
  107. </code DEFINE_E_HASH>
  108.  
  109.  
  110. <code DEFINE_COLLECTION_CLASS>
  111. <if ($KEY_ACCESS_COLLECTION$)>
  112.  
  113. //-----------------------------------------------------------------------------
  114. // Define the Key access function. This function must be defined outside
  115. // the element class. It has one argument, whose type is the element type.
  116. // The return value of this function must be a const reference.
  117. //-----------------------------------------------------------------------------
  118. inline $KEY_TYPE$ const& key($ELEMENT_TYPE$ const& t)
  119. <if ($USER_DEFINED_ELEMENT$) >
  120. <  >$E_KEY_BODY_1$
  121. <else>\<if ($KEY_TYPE$ == $ELEMENT_TYPE$) >
  122. <  >$E_KEY_BODY_2$
  123. <else>
  124. <  >$E_KEY_BODY_3$
  125. </if>\</if>
  126. --
  127. --
  128. </if>
  129.  
  130. //-----------------------------------------------------------------------------
  131. //  Collection Class declaration
  132. //-----------------------------------------------------------------------------
  133. <if ($KEY_ACCESS_COLLECTION$)>
  134. typedef $CLTN_TYPE$<$ELEMENT_TYPE$, $KEY_TYPE$> $CLTN_NAME$;
  135. <else>
  136. typedef $CLTN_TYPE$<$ELEMENT_TYPE$> $CLTN_NAME$;
  137. </if>
  138. </code DEFINE_COLLECTION_CLASS>
  139.  
  140. </code _ELEMENT_TDE_>
  141.