home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / cpp_config.tcl < prev    next >
Text File  |  1997-01-03  |  6KB  |  214 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1993 by Westmount Technology B.V., Delft, The Netherlands.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Westmount Technology B.V.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #    File        : @(#)cpp_config.tcl    /main/hindenburg/3
  17. #    Author        : frmo
  18. #    Original date    : 23-2-1993
  19. #    Description    : Configuration variables / functions
  20. #              for CC 3.0 and RogueWave class library
  21. #
  22. #---------------------------------------------------------------------------
  23. #
  24.  
  25. #
  26. # Configuration variables
  27. #
  28.  
  29. # has_templates: true if compiler supports templates
  30. #
  31. global has_templates
  32. set has_templates 1
  33.  
  34. # directory search path for external sources
  35. # could be a list separated by ':'
  36. global exsrc_searchpath
  37. # example usage:
  38. # set exsrc_searchpath /usr/source:/usr/you/project/src
  39.  
  40. global string::name
  41. set string::name RWCString
  42. global funcmap::key_type_name
  43. set funcmap::key_type_name ${string::name}
  44.  
  45. #
  46. # PtrSet configuration
  47. #
  48. global set::name
  49. set set::name WmtRWTPtrSet
  50. global set::add
  51. set set::add doInsert
  52. global set::remove
  53. set set::remove doRemove
  54.  
  55. proc set::iter {sect name type action} {
  56.     set s_name [uncap [set_name $name]]
  57.     expand_text $sect {
  58.         WmtRWTPtrSetIterator<~$type> ~${s_name}It(~$s_name);
  59.         while (++~${s_name}It) {
  60.             ~[eval $action ${s_name}It.key()]
  61.         }
  62.     }
  63. }
  64.  
  65. #
  66. # OPtrSet configuration
  67. #
  68. global oset::name
  69. set oset::name WmtRWTOPtrSet
  70. global oset::add
  71. set oset::add append
  72. global oset::remove
  73. set oset::remove remove
  74.  
  75. proc oset::iter {sect name type action} {
  76.     set os_name [uncap [oset_name $name]]
  77.     set cnt_name "[uncap [oset_name $name]]_cnt"
  78.     expand_text $sect {
  79.         int ~$cnt_name;
  80.         for (~$cnt_name = 0; ~$cnt_name < ~$os_name.entries(); ~$cnt_name++) {
  81.             ~[eval $action $os_name\\\[$cnt_name\\\]]
  82.         }
  83.     }
  84. }
  85.  
  86. # -------------------------------------------------------------------
  87. # PtrDict configuration
  88. # -------------------------------------------------------------------
  89. global dict::name
  90. set dict::name WmtRWTPtrDict
  91. global dict::set
  92. set dict::set doInsertKeyAndValue
  93. global dict::remove
  94. set dict::remove doRemove
  95.  
  96. proc dict::get_and_return {sect name key return_type} {
  97.     set ptr_name [uncap [pointer_name $return_type]]
  98.     expand_text $sect {
  99.         ~$return_type *~$ptr_name;
  100.         ~$name.doFindValue(~$key, ~$ptr_name);
  101.         return ~$ptr_name;
  102.     }
  103. }
  104.  
  105. proc dict::get_test_and_act {sect name key return_type action} {
  106.     set dct_name [uncap [dict_name $name]]
  107.     set ptr_name [uncap [pointer_name $return_type]]
  108.     expand_text $sect {
  109.         ~$return_type *~$ptr_name;
  110.         if (~$name.doFindValue(~$key, ~$ptr_name)) {
  111.             ~[eval $action $ptr_name]
  112.         }
  113.     }
  114. }
  115.     
  116. proc dict::iter {sect name type qual_type action} {
  117.     set dct_name [uncap [dict_name $name]]
  118.     set it_name [uncap $name]It
  119.     expand_text $sect {
  120.         WmtRWTPtrDictIterator<~$qual_type, ~$type> ~${it_name}(~$dct_name);
  121.         while (++~$it_name) {
  122.             ~[eval $action $it_name.value()]
  123.         }
  124.     }
  125. }
  126.  
  127. proc dict::initializer {name key value} {
  128.     return "${name}(hashIt)"
  129. }
  130.  
  131. # -------------------------------------------------------------------
  132. # PSetDict configuration
  133. # -------------------------------------------------------------------
  134. global psdict::name
  135. set psdict::name WmtRWTPSetDict
  136. global psdict::add
  137. set psdict::add doInsertKeyAndValue
  138. global psdict::remove
  139. set psdict::remove doRemoveKeyAndValue
  140.  
  141. proc psdict::get_and_return {sect name key return_type} {
  142.     set sdct_name [uncap [set_dict_name $name]]
  143.     set set_var [uncap [set_name $sdct_name]]
  144.     expand_text $sect {
  145.         ~$return_type *~$set_var;
  146.         ~$sdct_name.doFindValue(~$key, ~$set_var);
  147.         return ~$set_var;
  148.     }
  149. }
  150.  
  151. proc psdict::iter {sect name type qual_type action} {
  152.     set sdct_name [uncap [set_dict_name $name]]
  153.     set piv [uncap [set_name $name]]
  154.     set psiv [uncap $name]It
  155.     set sp [uncap [pointer_name $piv]]
  156.     set typeName [$type getName]
  157.     expand_text $sect {
  158.         WmtRWTPSetDictIterator<~$qual_type, ~$typeName> ~${psiv}(~$sdct_name);
  159.         while (++~$psiv) {
  160.             WmtRWTPtrSet<~$typeName> *~$sp = ~$psiv.value();
  161.             WmtRWTPtrSetIterator<~$typeName> ~${piv}It(*~$sp);
  162.             while(++~${piv}It) {
  163.                 ~[eval $action ${piv}It.key()]
  164.             }
  165.         }
  166.     }
  167. }
  168.  
  169. proc psdict::initializer {name key value} {
  170.     return "${name}(hashIt)"
  171. }
  172.  
  173. # -------------------------------------------------------------------
  174. # OPSetDict configuration
  175. # -------------------------------------------------------------------
  176. global opsdict::name
  177. set opsdict::name WmtRWTOPSetDict
  178. global opsdict::add
  179. set opsdict::add doInsertKeyAndValue
  180. global opsdict::remove
  181. set opsdict::remove doRemoveKeyAndValue
  182.  
  183. proc opsdict::get_and_return {sect name key return_type} {
  184.     set osdct_name [uncap [oset_dict_name $name]]
  185.     set oset_var [uncap [oset_name $osdct_name]]
  186.     expand_text $sect {
  187.         ~$return_type *~$oset_var;
  188.         ~$osdct_name.doFindValue(~$key, ~$oset_var);
  189.         return ~$oset_var;
  190.     }
  191. }
  192.  
  193. proc opsdict::iter {sect name type qual_type action} {
  194.     set osdct_name [uncap [oset_dict_name $name]]
  195.     set piv [uncap [oset_name $name]]
  196.     set opsiv [uncap $name]It
  197.     set osp [uncap [pointer_name $piv]]
  198.     set typeName [$type getName]
  199.     expand_text $sect {
  200.         WmtRWTOPSetDictIterator<~$qual_type, ~$typeName> ~${opsiv}(~$osdct_name);
  201.         while (++~$opsiv) {
  202.             WmtRWTOPtrSet<~$typeName> *~$osp = ~$opsiv.value();
  203.             for (int i = 0; i < ~$osp->entries(); i++) {
  204.                 ~[eval $action $osp->at(i)]
  205.             }
  206.         }
  207.     }
  208. }
  209.  
  210. proc opsdict::initializer {name key value} {
  211.     return "${name}(hashIt)"
  212. }
  213.  
  214.