home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / cppgclasses.tcl < prev    next >
Text File  |  1997-12-01  |  104KB  |  3,987 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1997 by Cayenne Software, Inc.
  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 Cayenne Software, Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : cppgclasses.tcl
  17. #       Author          : 
  18. #       Original date   : November 1997
  19. #       Description     : Classes for code generation
  20. #
  21. #---------------------------------------------------------------------------
  22.  
  23. #---------------------------------------------------------------------------
  24. #      File:           @(#)cppgtype.tcl    /main/titanic/8
  25. #---------------------------------------------------------------------------
  26.  
  27. # Start user added include file section
  28. # End user added include file section
  29.  
  30.  
  31. Class CppGType : {Object} {
  32.     constructor
  33.     method destructor
  34.     method check
  35.     method checkLocal
  36.     method generate
  37.     attribute loopCheck
  38. }
  39.  
  40. constructor CppGType {class this name} {
  41.     set this [Object::constructor $class $this $name]
  42.     # Start constructor user section
  43.     $this loopCheck 0
  44.     # End constructor user section
  45.     return $this
  46. }
  47.  
  48. method CppGType::destructor {this} {
  49.     # Start destructor user section
  50.     # End destructor user section
  51. }
  52.  
  53. method CppGType::check {this} {
  54.     set errorCnt 0
  55.     incr errorCnt [$this checkLocal]
  56.     return $errorCnt
  57. }
  58.  
  59. method CppGType::checkLocal {this} {
  60.     return 0
  61. }
  62.  
  63. method CppGType::generate {this tgt} {
  64.     m4_fatal $F_ABSTRACT "CppGType::generate"
  65. }
  66.  
  67. # Do not delete this line -- regeneration end marker
  68.  
  69. if [isCommand CMType] {
  70.     Class  CppGTypeD : {CppGType CMType} {
  71.     }
  72. } else {
  73.     Class CppGTypeD : {CppGType OPType} {    
  74.     }
  75. }
  76.  
  77. global mostDerivedOOPL ; set mostDerivedOOPL(OPType) CppGTypeD
  78.  
  79. selfPromoter OPType {this} {
  80.     CppGTypeD promote $this
  81. }
  82. #---------------------------------------------------------------------------
  83. #      File:           @(#)cppgfeatur.tcl    /main/titanic/7
  84. #---------------------------------------------------------------------------
  85.  
  86. # Start user added include file section
  87. # End user added include file section
  88.  
  89.  
  90. Class CppGFeature : {Object} {
  91.     constructor
  92.     method destructor
  93.     method check
  94.     method generate
  95. }
  96.  
  97. constructor CppGFeature {class this name} {
  98.     set this [Object::constructor $class $this $name]
  99.     # Start constructor user section
  100.     # End constructor user section
  101.     return $this
  102. }
  103.  
  104. method CppGFeature::destructor {this} {
  105.     # Start destructor user section
  106.     # End destructor user section
  107. }
  108.  
  109. method CppGFeature::check {this} {
  110.     return 0
  111. }
  112.  
  113. method CppGFeature::generate {this class} {
  114.     m4_fatal $F_ABSTRACT "CppGFeature::generate"
  115. }
  116.  
  117. # Do not delete this line -- regeneration end marker
  118.  
  119. if [isCommand CMFeature] {
  120.     Class  CppGFeatureD : {CppGFeature CMFeature} {
  121.     }
  122. } else {
  123.     Class CppGFeatureD : {CppGFeature OPFeature} {    
  124.     }
  125. }
  126.  
  127. global mostDerivedOOPL ; set mostDerivedOOPL(OPFeature) CppGFeatureD
  128.  
  129. selfPromoter OPFeature {this} {
  130.     CppGFeatureD promote $this
  131. }
  132. #---------------------------------------------------------------------------
  133. #      File:           @(#)cppgattrib.tcl    /main/titanic/7
  134. #---------------------------------------------------------------------------
  135.  
  136. # Start user added include file section
  137. # End user added include file section
  138.  
  139.  
  140. Class CppGAttribute : {CppGFeature} {
  141.     constructor
  142.     method destructor
  143.     method check
  144.     method generate
  145. }
  146.  
  147. constructor CppGAttribute {class this name} {
  148.     set this [CppGFeature::constructor $class $this $name]
  149.     # Start constructor user section
  150.     # End constructor user section
  151.     return $this
  152. }
  153.  
  154. method CppGAttribute::destructor {this} {
  155.     # Start destructor user section
  156.     # End destructor user section
  157. }
  158.  
  159. method CppGAttribute::check {this} {
  160.     return 0
  161. }
  162.  
  163. method CppGAttribute::generate {this class} {
  164.     m4_fatal $F_ABSTRACT "CppGAttribute::generate"
  165. }
  166.  
  167. # Do not delete this line -- regeneration end marker
  168.  
  169. if [isCommand CMAttribute] {
  170.     Class  CppGAttributeD : {CppGAttribute CMAttribute} {
  171.     }
  172. } else {
  173.     Class CppGAttributeD : {CppGAttribute OPAttribute} {    
  174.     }
  175. }
  176.  
  177. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribute) CppGAttributeD
  178.  
  179. selfPromoter OPAttribute {this} {
  180.     CppGAttributeD promote $this
  181. }
  182. #---------------------------------------------------------------------------
  183. #      File:           @(#)cppggenass.tcl    /main/titanic/10
  184. #---------------------------------------------------------------------------
  185.  
  186. # Start user added include file section
  187. # End user added include file section
  188.  
  189.  
  190. Class CppGGenAssocAttr : {CppGAttribute} {
  191.     constructor
  192.     method destructor
  193.     method getClassLibDef
  194.     method check
  195.     method generate
  196.     method generator
  197.     attribute _generator
  198.     attribute cppAssocAttr
  199. }
  200.  
  201. constructor CppGGenAssocAttr {class this name} {
  202.     set this [CppGAttribute::constructor $class $this $name]
  203.     # Start constructor user section
  204.     # End constructor user section
  205.     return $this
  206. }
  207.  
  208. method CppGGenAssocAttr::destructor {this} {
  209.     set ref [$this _generator]
  210.     if {$ref != ""} {
  211.         $ref _assocAttr ""
  212.     }
  213.     # Start destructor user section
  214.     # End destructor user section
  215. }
  216.  
  217. method CppGGenAssocAttr::getClassLibDef {this assocKind clss attr} {
  218.     global cplusplusClassLib
  219.     global cplusplusClassLibDefault
  220.     set classLibName [$this getPropertyValue "assoc_impl"]
  221.     if {($classLibName == "") || ($classLibName == "default")} {
  222.         set classLibName $cplusplusClassLibDefault
  223.     }
  224.     set implStrat [$this getPropertyValue "assoc_strategy"]
  225.     if {$implStrat == ""} {
  226.         set implStrat "default"
  227.     }
  228.     set aKind $assocKind
  229.     if [$this isOrdered] {
  230.         set aKind "O${assocKind}"
  231.     }
  232.     if {![info exists cplusplusClassLib($classLibName)]} {
  233.         m4_error $E_NOCLASSLIB $classLibName
  234.         set classLibName "default"
  235.     }
  236.     set bestCl ""
  237.     foreach {kind impl cl} $cplusplusClassLib($classLibName) {
  238.         if {($kind == $aKind) && ($impl == $implStrat)} {
  239.             return [$cl new $clss $attr]
  240.         }
  241.         if {$kind == $aKind} {
  242.             set bestCl $cl
  243.         }
  244.     }
  245.     if {$bestCl == ""} {
  246.         m4_fatal $E_NOCLASSLIB "$classLibName/$aKind/$implStrat"
  247.         exit
  248.     } else {
  249.         m4_error $E_NOCLASSLIB "$classLibName/$aKind/$implStrat"
  250.         return [$bestCl new $clss $attr]
  251.     }
  252. }
  253.  
  254. method CppGGenAssocAttr::check {this} {
  255.     set errCnt 0
  256.     set opp ""
  257.     set oppA [$this opposite]
  258.     if {$oppA != ""} {
  259.         set opp [$oppA ooplClass]
  260.         if {$opp != ""} {
  261.             if {[$oppA isMandatory] && [$this isMandatory]} {
  262.                 m4_error $E_MANDMAND \
  263.                     [[$this ooplClass] getName] [$opp getName]
  264.                 incr errCnt
  265.             }
  266.         }
  267.     }
  268.     set type [$this ooplType]
  269.     if {$type != ""} {
  270.         incr errCnt [$type check]
  271.     }
  272.     
  273.     return $errCnt
  274. }
  275.  
  276. method CppGGenAssocAttr::generate {this class} {
  277.     if [$this check] {
  278.         return 
  279.     }
  280.     return [[$this generator] generate $class]
  281. }
  282.  
  283. # Do not delete this line -- regeneration end marker
  284.  
  285. if [isCommand CMGenAssocAttr] {
  286.     Class  CppGGenAssocAttrD : {CppGGenAssocAttr CMGenAssocAttr} {
  287.     }
  288. } else {
  289.     Class CppGGenAssocAttrD : {CppGGenAssocAttr OPGenAssocAttr} {    
  290.     }
  291. }
  292.  
  293. global mostDerivedOOPL ; set mostDerivedOOPL(OPGenAssocAttr) CppGGenAssocAttrD
  294.  
  295. selfPromoter OPGenAssocAttr {this} {
  296.     CppGGenAssocAttrD promote $this
  297. }
  298. method CppGGenAssocAttr::generator {this args} {
  299.     if {$args == ""} {
  300.         return [$this _generator]
  301.     }
  302.     set ref [$this _generator]
  303.     if {$ref != ""} {
  304.         $ref _assocAttr ""
  305.     }
  306.     set obj [lindex $args 0]
  307.     if {$obj != ""} {
  308.         $obj _assocAttr $this
  309.     }
  310.     $this _generator $obj
  311. }
  312.  
  313. #---------------------------------------------------------------------------
  314. #      File:           @(#)cppglinkat.tcl    /main/titanic/12
  315. #---------------------------------------------------------------------------
  316.  
  317. # Start user added include file section
  318. # End user added include file section
  319.  
  320.  
  321. Class CppGLinkAttr : {CppGGenAssocAttr} {
  322.     constructor
  323.     method destructor
  324.     method setGenerator
  325. }
  326.  
  327. constructor CppGLinkAttr {class this name} {
  328.     set this [CppGGenAssocAttr::constructor $class $this $name]
  329.     # Start constructor user section
  330.     # End constructor user section
  331.     return $this
  332. }
  333.  
  334. method CppGLinkAttr::destructor {this} {
  335.     # Start destructor user section
  336.     # End destructor user section
  337. }
  338.  
  339. method CppGLinkAttr::setGenerator {this clss} {
  340.     set ofPart ""
  341.     if {[$this opposite] != ""} {
  342.         set oClassName [[[$this opposite] ooplClass] getName]
  343.         set ofPart "Of${oClassName}"
  344.     }
  345.     if {[$this getMultiplicity]=="one"} {
  346.         set assImpl [CppGAssocOne new]
  347.         $assImpl attrName "[$this getName]${ofPart}Ptr"
  348.         $this generator $assImpl 
  349.         set cldef [$this getClassLibDef "Ptr" $clss $assImpl]
  350.     } else {
  351.         set assImpl [CppGAssocMany new]
  352.         $assImpl attrName "[$this getName]${ofPart}Set"
  353.         $this generator $assImpl 
  354.         set cldef [$this getClassLibDef "Set" $clss $assImpl]
  355.     }
  356.     $assImpl cldef $cldef
  357. }
  358.  
  359. # Do not delete this line -- regeneration end marker
  360.  
  361. if [isCommand CMLinkAttr] {
  362.     Class  CppGLinkAttrD : {CppGLinkAttr CMLinkAttr} {
  363.     }
  364. } else {
  365.     Class CppGLinkAttrD : {CppGLinkAttr OPLinkAttr} {    
  366.     }
  367. }
  368.  
  369. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkAttr) CppGLinkAttrD
  370.  
  371. selfPromoter OPLinkAttr {this} {
  372.     CppGLinkAttrD promote $this
  373. }
  374. #---------------------------------------------------------------------------
  375. #      File:           @(#)cppgparame.tcl    /main/titanic/7
  376. #---------------------------------------------------------------------------
  377.  
  378. # Start user added include file section
  379. # End user added include file section
  380.  
  381.  
  382. Class CppGParameter : {Object} {
  383.     constructor
  384.     method destructor
  385.     method check
  386.     method generate
  387. }
  388.  
  389. constructor CppGParameter {class this name} {
  390.     set this [Object::constructor $class $this $name]
  391.     # Start constructor user section
  392.     # End constructor user section
  393.     return $this
  394. }
  395.  
  396. method CppGParameter::destructor {this} {
  397.     # Start destructor user section
  398.     # End destructor user section
  399. }
  400.  
  401. method CppGParameter::check {this} {
  402.     return 0
  403. }
  404.  
  405. method CppGParameter::generate {this method} {
  406.     m4_fatal $F_ABSTRACT "CppGParameter::generate"
  407. }
  408.  
  409. # Do not delete this line -- regeneration end marker
  410.  
  411. if [isCommand CMParameter] {
  412.     Class  CppGParameterD : {CppGParameter CMParameter} {
  413.     }
  414. } else {
  415.     Class CppGParameterD : {CppGParameter OPParameter} {    
  416.     }
  417. }
  418.  
  419. global mostDerivedOOPL ; set mostDerivedOOPL(OPParameter) CppGParameterD
  420.  
  421. selfPromoter OPParameter {this} {
  422.     CppGParameterD promote $this
  423. }
  424. #---------------------------------------------------------------------------
  425. #      File:           @(#)cppgassoca.tcl    /main/titanic/11
  426. #---------------------------------------------------------------------------
  427.  
  428. # Start user added include file section
  429. # End user added include file section
  430.  
  431.  
  432. Class CppGAssocAttr : {CppGGenAssocAttr} {
  433.     constructor
  434.     method destructor
  435.     method setGenerator
  436. }
  437.  
  438. constructor CppGAssocAttr {class this name} {
  439.     set this [CppGGenAssocAttr::constructor $class $this $name]
  440.     # Start constructor user section
  441.     # End constructor user section
  442.     return $this
  443. }
  444.  
  445. method CppGAssocAttr::destructor {this} {
  446.     # Start destructor user section
  447.     # End destructor user section
  448. }
  449.  
  450. method CppGAssocAttr::setGenerator {this clss} {
  451.     if {[$this getMultiplicity]=="one"} {
  452.         set assImpl [CppGAssocOne new]
  453.         $assImpl attrName "[$this getName]Ptr"
  454.         $this generator $assImpl 
  455.         set cldef [$this getClassLibDef "Ptr" $clss $assImpl]
  456.     } else {
  457.         set assImpl [CppGAssocMany new]
  458.         $assImpl attrName "[$this getName]Set"
  459.         $this generator $assImpl 
  460.         set cldef [$this getClassLibDef "Set" $clss $assImpl]
  461.     }
  462.     $assImpl cldef $cldef
  463. }
  464.  
  465. # Do not delete this line -- regeneration end marker
  466.  
  467. if [isCommand CMAssocAttr] {
  468.     Class  CppGAssocAttrD : {CppGAssocAttr CMAssocAttr} {
  469.     }
  470. } else {
  471.     Class CppGAssocAttrD : {CppGAssocAttr OPAssocAttr} {    
  472.     }
  473. }
  474.  
  475. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocAttr) CppGAssocAttrD
  476.  
  477. selfPromoter OPAssocAttr {this} {
  478.     CppGAssocAttrD promote $this
  479. }
  480. #---------------------------------------------------------------------------
  481. #      File:           @(#)cppgassocg.tcl    /main/titanic/15
  482. #---------------------------------------------------------------------------
  483.  
  484. # Start user added include file section
  485. # End user added include file section
  486.  
  487.  
  488. Class CppGAssocGen : {GCObject} {
  489.     constructor
  490.     method destructor
  491.     method check
  492.     method checkLocal
  493.     method getTypeDef
  494.     method generate
  495.     method generateInclude
  496.     method generateSet
  497.     method generateGet
  498.     method generateAdd
  499.     method generateRemove
  500.     method generateCtor
  501.     method generateDtor
  502.     method assocAttr
  503.     attribute attrName
  504.     attribute attrType
  505.     attribute cldef
  506.     attribute _assocAttr
  507. }
  508.  
  509. constructor CppGAssocGen {class this} {
  510.     set this [GCObject::constructor $class $this]
  511.     # Start constructor user section
  512.     $this attrName ""
  513.     $this attrType ""
  514.     # End constructor user section
  515.     return $this
  516. }
  517.  
  518. method CppGAssocGen::destructor {this} {
  519.     # Start destructor user section
  520.     # End destructor user section
  521. }
  522.  
  523. method CppGAssocGen::check {this} {
  524.     set errCnt 0
  525.     incr errCnt [$this checkLocal]
  526.     return $errCnt
  527. }
  528.  
  529. method CppGAssocGen::checkLocal {this} {
  530.     return 0
  531. }
  532.  
  533. method CppGAssocGen::getTypeDef {this} {
  534.     # Dummy function, should be overloaded in a sub class (when needed)
  535. }
  536.  
  537. method CppGAssocGen::generate {this class} {
  538.     if [$this checkLocal] {
  539.         return
  540.     }
  541.     set opp ""
  542.     set oppA [[$this assocAttr] opposite]
  543.     if {$oppA != ""} {
  544.         set opp [$oppA ooplClass]
  545.     }
  546.     set type [$this getTypeDef]
  547.     set attr [CppAssocAttrib new $class Private $type]
  548.     $attr comment [[$this assocAttr] getPropertyValue "freeText"]
  549.     if {[$this attrName] == "" } {
  550.         $this attrName [[$this assocAttr] getName]
  551.     }
  552.     if {[$this attrType] == ""} {
  553.         set attrTypeObj [[[$this assocAttr] ooplType] generate [$class model]]
  554.         $attrTypeObj isReference 0
  555.         $attrTypeObj isPointer 0
  556.         $this attrType [$attrTypeObj getTypeName cpp $class]
  557.     }
  558.     $attr name [$this attrName]
  559.     [$this assocAttr] cppAssocAttr $attr
  560.  
  561.     if {$opp != ""} {
  562.         set tgt [$class model]
  563.         set oppcl [ $tgt findDefinition [$opp getName] ]
  564.         if { $oppcl == "" } {
  565.             set oppcl [ $opp generate $tgt ]
  566.             $oppcl isSynthetic 1
  567.         }
  568.  
  569.         $class addFriendClass $oppcl
  570.     }
  571.  
  572.     $this generateInclude $class
  573.     $this generateSet $class
  574.     $this generateGet $class
  575.     $this generateAdd $class
  576.     $this generateRemove $class
  577.     $this generateCtor $class
  578.     $this generateDtor $class
  579.  
  580.     return $attr
  581. }
  582.  
  583. method CppGAssocGen::generateInclude {this class} {
  584.     # Dummy function, should be overloaded in a sub class (when needed)
  585. }
  586.  
  587. method CppGAssocGen::generateSet {this class} {
  588.     # Dummy function, should be overloaded in a sub class (when needed)
  589. }
  590.  
  591. method CppGAssocGen::generateGet {this class} {
  592.     # Dummy function, should be overloaded in a sub class (when needed)
  593. }
  594.  
  595. method CppGAssocGen::generateAdd {this class} {
  596.     # Dummy function, should be overloaded in a sub class (when needed)
  597. }
  598.  
  599. method CppGAssocGen::generateRemove {this class} {
  600.     # Dummy function, should be overloaded in a sub class (when needed)
  601. }
  602.  
  603. method CppGAssocGen::generateCtor {this class} {
  604.     # Dummy function, should be overloaded in a sub class (when needed)
  605. }
  606.  
  607. method CppGAssocGen::generateDtor {this class} {
  608.     # Dummy function, should be overloaded in a sub class (when needed)
  609. }
  610.  
  611. # Do not delete this line -- regeneration end marker
  612.  
  613. method CppGAssocGen::assocAttr {this args} {
  614.     if {$args == ""} {
  615.         return [$this _assocAttr]
  616.     }
  617.     set ref [$this _assocAttr]
  618.     if {$ref != ""} {
  619.         $ref _generator ""
  620.     }
  621.     set obj [lindex $args 0]
  622.     if {$obj != ""} {
  623.         $obj _generator $this
  624.     }
  625.     $this _assocAttr $obj
  626. }
  627.  
  628. #---------------------------------------------------------------------------
  629. #      File:           @(#)cppgassoci.tcl    /main/titanic/7
  630. #---------------------------------------------------------------------------
  631.  
  632. # Start user added include file section
  633. # End user added include file section
  634.  
  635.  
  636. Class CppGAssocInitializer : {Object} {
  637.     constructor
  638.     method destructor
  639.     method check
  640.     method generate
  641. }
  642.  
  643. constructor CppGAssocInitializer {class this name} {
  644.     set this [Object::constructor $class $this $name]
  645.     # Start constructor user section
  646.     # End constructor user section
  647.     return $this
  648. }
  649.  
  650. method CppGAssocInitializer::destructor {this} {
  651.     # Start destructor user section
  652.     # End destructor user section
  653. }
  654.  
  655. method CppGAssocInitializer::check {this} {
  656.     return 0
  657. }
  658.  
  659. method CppGAssocInitializer::generate {this ctor} {
  660.     # No initializers are generated, all initializing is
  661.     # done in the constructor
  662.     # [[$this assoc] generator] generateInitializer $this $ctor
  663. }
  664.  
  665. # Do not delete this line -- regeneration end marker
  666.  
  667. if [isCommand CMAssocInitializer] {
  668.     Class  CppGAssocInitializerD : {CppGAssocInitializer CMAssocInitializer} {
  669.     }
  670. } else {
  671.     Class CppGAssocInitializerD : {CppGAssocInitializer OPAssocInitializer} {    
  672.     }
  673. }
  674.  
  675. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocInitializer) CppGAssocInitializerD
  676.  
  677. selfPromoter OPAssocInitializer {this} {
  678.     CppGAssocInitializerD promote $this
  679. }
  680. #---------------------------------------------------------------------------
  681. #      File:           @(#)cppgattrin.tcl    /main/titanic/7
  682. #---------------------------------------------------------------------------
  683.  
  684. # Start user added include file section
  685. # End user added include file section
  686.  
  687.  
  688. Class CppGAttrInitializer : {Object} {
  689.     constructor
  690.     method destructor
  691.     method check
  692.     method generate
  693. }
  694.  
  695. constructor CppGAttrInitializer {class this name} {
  696.     set this [Object::constructor $class $this $name]
  697.     # Start constructor user section
  698.     # End constructor user section
  699.     return $this
  700. }
  701.  
  702. method CppGAttrInitializer::destructor {this} {
  703.     # Start destructor user section
  704.     # End destructor user section
  705. }
  706.  
  707. method CppGAttrInitializer::check {this} {
  708.     return 0
  709. }
  710.  
  711. method CppGAttrInitializer::generate {this ctor} {
  712.  
  713.     set attr [$this attrib]
  714.     set class [$ctor cl]
  715.     set type [[$attr ooplType] generate [$class model]]
  716.  
  717.     if { [$type name] == "char" && [$type isArray] } {
  718.         $class addExtIncl "string.h"
  719.         set ctorSect [CppGenCode new $ctor]
  720.         $ctorSect append "strcpy ([$attr getName], [$this getName]);\n"
  721.     } else {
  722.         set init [CppInitializer new $ctor]
  723.         $init name [$attr getName]
  724.  
  725.         # Create value for this initializer
  726.         set initVal [CppInitValue new $init]
  727.         $initVal value [$this getName]
  728.         return $init
  729.     }
  730.     return ""
  731. }
  732.  
  733. # Do not delete this line -- regeneration end marker
  734.  
  735. if [isCommand CMAttribInitializer] {
  736.     Class  CppGAttrInitializerD : {CppGAttrInitializer CMAttribInitializer} {
  737.     }
  738. } else {
  739.     Class CppGAttrInitializerD : {CppGAttrInitializer OPAttribInitializer} {    
  740.     }
  741. }
  742.  
  743. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribInitializer) CppGAttrInitializerD
  744.  
  745. selfPromoter OPAttribInitializer {this} {
  746.     CppGAttrInitializerD promote $this
  747. }
  748. #---------------------------------------------------------------------------
  749. #      File:           @(#)cppgbasety.tcl    /main/titanic/6
  750. #---------------------------------------------------------------------------
  751.  
  752. # Start user added include file section
  753. # End user added include file section
  754.  
  755.  
  756. Class CppGBaseType : {CppGType} {
  757.     constructor
  758.     method destructor
  759.     method check
  760.     method generate
  761. }
  762.  
  763. constructor CppGBaseType {class this name} {
  764.     set this [CppGType::constructor $class $this $name]
  765.     # Start constructor user section
  766.     # End constructor user section
  767.     return $this
  768. }
  769.  
  770. method CppGBaseType::destructor {this} {
  771.     # Start destructor user section
  772.     # End destructor user section
  773. }
  774.  
  775. method CppGBaseType::check {this} {
  776.     return 0
  777. }
  778.  
  779. method CppGBaseType::generate {this tgt} {
  780.     set type [CppType new]
  781.     set type3gl [$this getType3GL]
  782.     if [regexp {(var)?char\[[0-9][0-9]*]} $type3gl] {
  783.         regsub {(var)?([^\[]*)\[([0-9][0-9]*)]} $type3gl {\2} name
  784.         $type name $name
  785.         regsub {([^\[]*)\[([0-9][0-9]*)]} $type3gl {\2} size
  786.         if { $name == "char" } {
  787.             $type arraySize [expr $size + 1]
  788.         } else {
  789.             $type arraySize $size
  790.         }
  791.     } else {
  792.         $type name $type3gl
  793.     }
  794.     return $type
  795. }
  796.  
  797. # Do not delete this line -- regeneration end marker
  798.  
  799. if [isCommand CMBaseType] {
  800.     Class  CppGBaseTypeD : {CppGBaseType CMBaseType} {
  801.     }
  802. } else {
  803.     Class CppGBaseTypeD : {CppGBaseType OPBaseType} {    
  804.     }
  805. }
  806.  
  807. global mostDerivedOOPL ; set mostDerivedOOPL(OPBaseType) CppGBaseTypeD
  808.  
  809. selfPromoter OPBaseType {this} {
  810.     CppGBaseTypeD promote $this
  811. }
  812. #---------------------------------------------------------------------------
  813. #      File:           @(#)cppgclass.tcl    /main/titanic/17
  814. #---------------------------------------------------------------------------
  815.  
  816. # Start user added include file section
  817. # End user added include file section
  818.  
  819.  
  820. Class CppGClass : {Object} {
  821.     constructor
  822.     method destructor
  823.     method check
  824.     method checkLocal
  825.     method checkLoop
  826.     method generate
  827.     attribute loopTrace
  828.     attribute checkStatus
  829. }
  830.  
  831. constructor CppGClass {class this name} {
  832.     set this [Object::constructor $class $this $name]
  833.     # Start constructor user section
  834.     # End constructor user section
  835.     return $this
  836. }
  837.  
  838. method CppGClass::destructor {this} {
  839.     # Start destructor user section
  840.     # End destructor user section
  841. }
  842.  
  843. method CppGClass::check {this} {
  844.     if {[$this checkStatus] != ""} {
  845.         return [$this checkStatus]
  846.     }
  847.     set errorCnt 0
  848.     $this checkStatus 0
  849.     if {[$this checkLoop] == 1} {
  850.         incr errorCnt
  851.     } else {
  852.         foreach feature [$this featureSet] {
  853.             incr errorCnt [$feature check]
  854.         }
  855.         foreach genNode [$this genNodeSet] {
  856.             incr errorCnt [$genNode check]
  857.         }
  858.     }
  859.     $this checkStatus $errorCnt
  860.     return $errorCnt
  861. }
  862.  
  863. method CppGClass::checkLocal {this} {
  864.     set errorCnt 0
  865.     incr errorCnt [$this checkLoop]
  866.     return $errorCnt
  867. }
  868.  
  869. method CppGClass::checkLoop {this {recursiveCall 0}} {
  870.     if {[$this loopTrace] == 1} {
  871.         return 1
  872.     }
  873.     $this loopTrace 1
  874.     foreach genNode [$this genNodeSet] {
  875.         set super [$genNode superClass]
  876.         if {[$super checkLoop 1] == 1} {
  877.             $this loopTrace 0
  878.             return 1
  879.         }
  880.     }
  881.     foreach assocAttr [$this genAssocAttrSet] {
  882.         if [$assocAttr isMandatory] {
  883.             set type [$assocAttr ooplType]
  884.             if {$type != ""} {
  885.                 if [$type isA OPClassType] {
  886.                     set otherClass [$type ooplClass]
  887.                     if {$otherClass != ""} {
  888.                         if {[$otherClass checkLoop 1] == 1} {
  889.                             if {$recursiveCall == 0} {
  890.                                 m4_error $E_ASSOCLOOP [$this getName]
  891.                             }
  892.                             $this loopTrace 0
  893.                             return 1
  894.                         }
  895.                     }
  896.                 }
  897.             }
  898.         }
  899.     }
  900.     $this loopTrace 0
  901.     return 0
  902. }
  903.  
  904. method CppGClass::generate {this tgt} {
  905.     if {[$this checkLocal] > 0} {
  906.         set cl [ $tgt findDefinition [$this getName] ] 
  907.         if {$cl == ""} {
  908.             set cl [CppClass new $this $tgt]
  909.         }
  910.         $cl isSynthetic 1
  911.         return $cl
  912.     }
  913.  
  914.     set cl [ $tgt findDefinition [$this getName] ] 
  915.     if { $cl == "" } {
  916.         set cl [CppClass new $this $tgt]
  917.         $cl isSynthetic 0
  918.     } else {
  919.         $cl isSynthetic 0
  920.         return $cl
  921.     }
  922.  
  923.     $cl comment [$this getPropertyValue "freeText"]
  924.  
  925.     # Generate destructor
  926.     set type [CppType new]
  927.     set dtor [CppDestructor new $cl "Public" $type]
  928.  
  929.     set dynDtor 0
  930.  
  931.     foreach genAssocAttr [$this genAssocAttrSet] {
  932.         $genAssocAttr setGenerator $cl
  933.     }
  934.  
  935.     set ctor [$this constructor] 
  936.     if {$ctor != ""} {
  937.             $ctor generate $cl
  938.     }
  939.  
  940.     foreach dataAttr [$this dataAttrSet] {
  941.         $dataAttr generate $cl
  942.     }
  943.  
  944.     foreach genAssocAttr [$this genAssocAttrSet] {
  945.         $genAssocAttr generate $cl
  946.     }
  947.  
  948.     foreach operation [$this operationSet] {
  949.         $operation generate $cl
  950.         if [$operation isDynBound] {
  951.             set dynDtor 1
  952.         }
  953.     }
  954.  
  955.     foreach genNode [$this genNodeSet] {
  956.         $genNode generate $cl
  957.     }
  958.  
  959.     if {[llength [$this specNodeSet]] > 0} {
  960.         set dynDtor 1
  961.     }
  962.  
  963.     switch [$this getPropertyValue "has_dyn_dtor"] {
  964.         yes    { set dynDtor 1 }
  965.         no    { set dynDtor 0 }
  966.     }
  967.  
  968.     $dtor isDynamic $dynDtor
  969.  
  970.     return $cl
  971. }
  972.  
  973. # Do not delete this line -- regeneration end marker
  974.  
  975. if [isCommand CMClass] {
  976.     Class  CppGClassD : {CppGClass CMClass} {
  977.     }
  978. } else {
  979.     Class CppGClassD : {CppGClass OPClass} {    
  980.     }
  981. }
  982.  
  983. global mostDerivedOOPL ; set mostDerivedOOPL(OPClass) CppGClassD
  984.  
  985. selfPromoter OPClass {this} {
  986.     CppGClassD promote $this
  987. }
  988. #---------------------------------------------------------------------------
  989. #      File:           @(#)cppgclasst.tcl    /main/titanic/11
  990. #---------------------------------------------------------------------------
  991.  
  992. # Start user added include file section
  993. # End user added include file section
  994.  
  995.  
  996. Class CppGClassType : {CppGType} {
  997.     constructor
  998.     method destructor
  999.     method check
  1000.     method checkLocal
  1001.     method generate
  1002. }
  1003.  
  1004. constructor CppGClassType {class this name} {
  1005.     set this [CppGType::constructor $class $this $name]
  1006.     # Start constructor user section
  1007.     # End constructor user section
  1008.     return $this
  1009. }
  1010.  
  1011. method CppGClassType::destructor {this} {
  1012.     # Start destructor user section
  1013.     # End destructor user section
  1014. }
  1015.  
  1016. method CppGClassType::check {this} {
  1017.     set errorCnt 0
  1018.     if {[$this ooplClass] != ""} {
  1019.         incr errorCnt [[$this ooplClass] check]
  1020.     }
  1021.     return $errorCnt
  1022. }
  1023.  
  1024. method CppGClassType::checkLocal {this} {
  1025.     set errorCnt 0
  1026.     return $errorCnt
  1027. }
  1028.  
  1029. method CppGClassType::generate {this tgt} {
  1030.     set type [CppType new]
  1031.     if {[$this checkLocal] > 0} {
  1032.         return $type
  1033.     }
  1034.     set oClass [$this ooplClass]
  1035.     if { $oClass == "" } {
  1036.         $type name [$this getType3GL]
  1037.     } else {
  1038.         set cl [$tgt findDefinition [$oClass getName]]
  1039.         if { $cl == "" } {
  1040.             set cl [$oClass generate $tgt]
  1041.             $cl isSynthetic 1
  1042.         }
  1043.         $type localType $cl
  1044.     }
  1045.     return $type
  1046. }
  1047.  
  1048. # Do not delete this line -- regeneration end marker
  1049.  
  1050. if [isCommand CMClassType] {
  1051.     Class  CppGClassTypeD : {CppGClassType CMClassType} {
  1052.     }
  1053. } else {
  1054.     Class CppGClassTypeD : {CppGClassType OPClassType} {    
  1055.     }
  1056. }
  1057.  
  1058. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassType) CppGClassTypeD
  1059.  
  1060. selfPromoter OPClassType {this} {
  1061.     CppGClassTypeD promote $this
  1062. }
  1063. #---------------------------------------------------------------------------
  1064. #      File:           @(#)cppgclenum.tcl    /main/titanic/9
  1065. #---------------------------------------------------------------------------
  1066.  
  1067. # Start user added include file section
  1068. # End user added include file section
  1069.  
  1070.  
  1071. Class CppGClEnum : {CppGClass} {
  1072.     constructor
  1073.     method destructor
  1074.     method check
  1075.     method checkLocal
  1076.     method generate
  1077. }
  1078.  
  1079. constructor CppGClEnum {class this name} {
  1080.     set this [CppGClass::constructor $class $this $name]
  1081.     # Start constructor user section
  1082.     # End constructor user section
  1083.     return $this
  1084. }
  1085.  
  1086. method CppGClEnum::destructor {this} {
  1087.     # Start destructor user section
  1088.     # End destructor user section
  1089. }
  1090.  
  1091. method CppGClEnum::check {this} {
  1092.     set errorCnt 0
  1093.     incr errorCnt [$this checkLocal]
  1094.     foreach feat [$this featureSet] {
  1095.         incr errorCnt [$feat check]
  1096.     }
  1097.     return $errorCnt
  1098. }
  1099.  
  1100. method CppGClEnum::checkLocal {this} {
  1101.     return 0
  1102. }
  1103.  
  1104. method CppGClEnum::generate {this tgt} {
  1105.     set cl [ $tgt findDefinition [ $this getName ] ] 
  1106.     if {$cl != ""} {
  1107.         $cl isSynthetic 0
  1108.     } else {
  1109.         set cl [CppEnum new $this $tgt]
  1110.         $cl isSynthetic 0
  1111.         $cl name [ $this getName ]
  1112.         $cl comment [ $this getPropertyValue "freeText" ]
  1113.         foreach feat [$this featureSet] {
  1114.             set item [CppEnumItem new $cl]
  1115.             $item item [$feat getName]
  1116.             $item value [$feat getPropertyValue initial_value]
  1117.             $item comment [$feat getPropertyValue "freeText"]
  1118.         }
  1119.     }
  1120.     return $cl
  1121. }
  1122.  
  1123. # Do not delete this line -- regeneration end marker
  1124.  
  1125. if [isCommand CMClassEnum] {
  1126.     Class  CppGClEnumD : {CppGClEnum CMClassEnum} {
  1127.     }
  1128. } else {
  1129.     Class CppGClEnumD : {CppGClEnum OPClassEnum} {    
  1130.     }
  1131. }
  1132.  
  1133. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassEnum) CppGClEnumD
  1134.  
  1135. selfPromoter OPClassEnum {this} {
  1136.     CppGClEnumD promote $this
  1137. }
  1138. #---------------------------------------------------------------------------
  1139. #      File:           @(#)cppgclgent.tcl    /main/titanic/14
  1140. #---------------------------------------------------------------------------
  1141.  
  1142. # Start user added include file section
  1143. # End user added include file section
  1144.  
  1145.  
  1146. Class CppGClGenTDef : {CppGClass} {
  1147.     constructor
  1148.     method destructor
  1149.     method check
  1150.     method checkLocal
  1151.     method generate
  1152. }
  1153.  
  1154. constructor CppGClGenTDef {class this name} {
  1155.     set this [CppGClass::constructor $class $this $name]
  1156.     # Start constructor user section
  1157.     # End constructor user section
  1158.     return $this
  1159. }
  1160.  
  1161. method CppGClGenTDef::destructor {this} {
  1162.     # Start destructor user section
  1163.     # End destructor user section
  1164. }
  1165.  
  1166. method CppGClGenTDef::check {this} {
  1167.     set errorCnt 0
  1168.     incr errorCnt [$this checkLocal]
  1169.     if {[$this loopTrace] == 1} {
  1170.         m4_error $E_REFERTYPED [$this getName]
  1171.         incr errorCnt
  1172.     } else {
  1173.         $this loopTrace 1
  1174.         set assoc [lindex [$this genAssocAttrSet] 0]
  1175.         if {$assoc != ""} {
  1176.             incr errorCnt [$assoc check]
  1177.         } else {
  1178.             incr errorCnt
  1179.         }
  1180.         $this loopTrace 0
  1181.     }
  1182.     return $errorCnt
  1183. }
  1184.  
  1185. method CppGClGenTDef::checkLocal {this} {
  1186.     return 0
  1187. }
  1188.  
  1189. method CppGClGenTDef::generate {this tgt} {
  1190.     set typeDef [$tgt findDefinition [$this getName]]
  1191.     if {$typeDef != ""} {
  1192.         if [$typeDef isSynthetic] {
  1193.             $typeDef isSynthetic 0
  1194.         } else {
  1195.             m4_error $E_EXISTS [$this getName]
  1196.         }
  1197.     } else {
  1198.         if {[$this check] > 0} {
  1199.             set typeDef [CppTypeDef new $this $tgt [CppType new]]
  1200.             $typeDef isSynthetic 1
  1201.         } else {
  1202.             # faking type, will set it right after setGenerator
  1203.             set typeDef [CppTypeDef new $this $tgt ""]
  1204.             set assoc [lindex [$this genAssocAttrSet] 0]
  1205.             $assoc setGenerator $typeDef
  1206.             set type [[$assoc generator] getTypeDef]
  1207.             $typeDef type $type
  1208.             $typeDef isSynthetic 0
  1209.             $typeDef comment [$this getPropertyValue "freeText"]
  1210.             $typeDef name [$this getName]
  1211.             [$assoc generator] generateInclude $typeDef
  1212.         }
  1213.     }
  1214.     return $typeDef
  1215. }
  1216.  
  1217. # Do not delete this line -- regeneration end marker
  1218.  
  1219. if [isCommand CMClassGenericTypeDef] {
  1220.     Class  CppGClGenTDefD : {CppGClGenTDef CMClassGenericTypeDef} {
  1221.     }
  1222. } else {
  1223.     Class CppGClGenTDefD : {CppGClGenTDef OPClassGenericTypeDef} {    
  1224.     }
  1225. }
  1226.  
  1227. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassGenericTypeDef) CppGClGenTDefD
  1228.  
  1229. selfPromoter OPClassGenericTypeDef {this} {
  1230.     CppGClGenTDefD promote $this
  1231. }
  1232. #---------------------------------------------------------------------------
  1233. #      File:           @(#)cppgcltdef.tcl    /main/titanic/10
  1234. #---------------------------------------------------------------------------
  1235.  
  1236. # Start user added include file section
  1237. # End user added include file section
  1238.  
  1239.  
  1240. Class CppGClTDef : {CppGClass} {
  1241.     constructor
  1242.     method destructor
  1243.     method check
  1244.     method checkLocal
  1245.     method generate
  1246. }
  1247.  
  1248. constructor CppGClTDef {class this name} {
  1249.     set this [CppGClass::constructor $class $this $name]
  1250.     # Start constructor user section
  1251.     # End constructor user section
  1252.     return $this
  1253. }
  1254.  
  1255. method CppGClTDef::destructor {this} {
  1256.     # Start destructor user section
  1257.     # End destructor user section
  1258. }
  1259.  
  1260. method CppGClTDef::check {this} {
  1261.     set errorCnt 0
  1262.     incr errorCnt [$this checkLocal]
  1263.     if {[$this loopTrace] == 1} {
  1264.         m4_error $E_REFERTYPED [$this getName]
  1265.         incr errorCnt
  1266.     } else {
  1267.         $this loopTrace 1
  1268.         if {[$this dataAttrSet] != ""} {
  1269.             set feat [lindex [$this dataAttrSet] 0]
  1270.             incr errorCnt [[$feat ooplType] check]
  1271.         }
  1272.         $this loopTrace 0
  1273.     }
  1274.         return $errorCnt
  1275. }
  1276.  
  1277. method CppGClTDef::checkLocal {this} {
  1278.     if {[$this dataAttrSet] == ""} {
  1279.         return 1
  1280.     }
  1281.     return 0
  1282. }
  1283.  
  1284. method CppGClTDef::generate {this tgt} {
  1285.     if {[$this checkLocal] > 0} {
  1286.         set cl [CppTypeDef new $this $tgt [CppType new]]
  1287.         $cl isSynthetic 1
  1288.         return $cl
  1289.     }
  1290.     set cl [ $tgt findDefinition [ $this getName ] ]
  1291.     if {$cl == ""} {
  1292.         set feat [lindex [$this dataAttrSet] 0]
  1293.         set type [[$feat ooplType] generate $tgt]
  1294.         set cl [CppTypeDef new $this $tgt $type]
  1295.         $cl name [ $this getName ]
  1296.         $cl comment [ $this getPropertyValue "freeText" ]
  1297.     }
  1298.     $cl isSynthetic 0
  1299.     return $cl
  1300. }
  1301.  
  1302. # Do not delete this line -- regeneration end marker
  1303.  
  1304. if [isCommand CMClassTDef] {
  1305.     Class  CppGClTDefD : {CppGClTDef CMClassTDef} {
  1306.     }
  1307. } else {
  1308.     Class CppGClTDefD : {CppGClTDef OPClassTDef} {    
  1309.     }
  1310. }
  1311.  
  1312. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassTDef) CppGClTDefD
  1313.  
  1314. selfPromoter OPClassTDef {this} {
  1315.     CppGClTDefD promote $this
  1316. }
  1317. #---------------------------------------------------------------------------
  1318. #      File:           @(#)cppgconstr.tcl    /main/titanic/8
  1319. #---------------------------------------------------------------------------
  1320.  
  1321. # Start user added include file section
  1322. # End user added include file section
  1323.  
  1324.  
  1325. Class CppGConstructor : {CppGFeature} {
  1326.     constructor
  1327.     method destructor
  1328.     method check
  1329.     method checkLocal
  1330.     method generate
  1331. }
  1332.  
  1333. constructor CppGConstructor {class this name} {
  1334.     set this [CppGFeature::constructor $class $this $name]
  1335.     # Start constructor user section
  1336.     # End constructor user section
  1337.     return $this
  1338. }
  1339.  
  1340. method CppGConstructor::destructor {this} {
  1341.     # Start destructor user section
  1342.     # End destructor user section
  1343. }
  1344.  
  1345. method CppGConstructor::check {this} {
  1346.     set errorCnt 0
  1347.     incr errorCnt [$this checkLocal]
  1348.     foreach param [[$this ooplClass] fullCreationParamSet] {
  1349.         incr errorCnt [$param check]
  1350.     }
  1351.     foreach initializer [$this fullInitializerSet] {
  1352.         incr errorCnt [$initializer check]
  1353.     }
  1354.     return $errorCnt
  1355. }
  1356.  
  1357. method CppGConstructor::checkLocal {this} {
  1358.     set errorCnt 0
  1359.     return $errorCnt
  1360. }
  1361.  
  1362. method CppGConstructor::generate {this class} {
  1363.     if {[$this checkLocal] > 0} {
  1364.         return [CppConstructor new $class "Private" [CppType new]]
  1365.     }
  1366.     # class is the Cpp target class of this ctor
  1367.     set access [$this getPropertyValue "method_access"]
  1368.     set type [CppType new]
  1369.     set ctor [CppConstructor new $class $access $type]
  1370.     $ctor comment [$this getPropertyValue "freeText"]
  1371.  
  1372.     foreach param [[$this ooplClass] fullCreationParamSet] {
  1373.         $param generate $ctor
  1374.     }
  1375.  
  1376.     foreach initializer [$this fullInitializerSet] {
  1377.         $initializer generate $ctor
  1378.     }
  1379.     return $ctor
  1380. }
  1381.  
  1382. # Do not delete this line -- regeneration end marker
  1383.  
  1384. if [isCommand CMConstructor] {
  1385.     Class  CppGConstructorD : {CppGConstructor CMConstructor} {
  1386.     }
  1387. } else {
  1388.     Class CppGConstructorD : {CppGConstructor OPConstructor} {    
  1389.     }
  1390. }
  1391.  
  1392. global mostDerivedOOPL ; set mostDerivedOOPL(OPConstructor) CppGConstructorD
  1393.  
  1394. selfPromoter OPConstructor {this} {
  1395.     CppGConstructorD promote $this
  1396. }
  1397. #---------------------------------------------------------------------------
  1398. #      File:           @(#)cppgctorpa.tcl    /main/titanic/10
  1399. #---------------------------------------------------------------------------
  1400.  
  1401. # Start user added include file section
  1402. # End user added include file section
  1403.  
  1404.  
  1405. Class CppGCtorParameter : {CppGParameter} {
  1406.     constructor
  1407.     method destructor
  1408.     method check
  1409.     method generate
  1410. }
  1411.  
  1412. constructor CppGCtorParameter {class this name} {
  1413.     set this [CppGParameter::constructor $class $this $name]
  1414.     # Start constructor user section
  1415.     # End constructor user section
  1416.     return $this
  1417. }
  1418.  
  1419. method CppGCtorParameter::destructor {this} {
  1420.     # Start destructor user section
  1421.     # End destructor user section
  1422. }
  1423.  
  1424. method CppGCtorParameter::check {this} {
  1425.     set errorCnt 0
  1426.     incr errorCnt [[$this ooplType] check]
  1427.     return $errorCnt
  1428. }
  1429.  
  1430. method CppGCtorParameter::generate {this method} {
  1431.     set type [[$this ooplType] generate [[$method cl] model]]
  1432.     switch [$this getPropertyValue "modifier"] {
  1433.         "Value" {}
  1434.         "Pointer" { $type isPointer 1 }
  1435.         "Reference" { $type isReference 1 }
  1436.         "Pointer to Const" { $type isPointer 1 ; $type isConst 1 }
  1437.         "Reference to Const" { $type isReference 1 ; $type isConst 1 }
  1438.         default { if {[$type localType]!=""} {$type isReference 1 ; $type isConst 1} }
  1439.     }
  1440.     set param [CppParam new $type $method]
  1441.     $param name [$this getName]
  1442.     set defaultValue [$this getPropertyValue "default_value"]
  1443.     set attrib [$this attrib]
  1444.     if {($defaultValue == "") && ($attrib != "")} {
  1445.         set defaultValue [$attrib getInitialValue]
  1446.     }
  1447.     $param defaultValue $defaultValue
  1448.     return $param
  1449. }
  1450.  
  1451. # Do not delete this line -- regeneration end marker
  1452.  
  1453. if [isCommand CMCtorParameter] {
  1454.     Class  CppGCtorParameterD : {CppGCtorParameter CMCtorParameter} {
  1455.     }
  1456. } else {
  1457.     Class CppGCtorParameterD : {CppGCtorParameter OPCtorParameter} {    
  1458.     }
  1459. }
  1460.  
  1461. global mostDerivedOOPL ; set mostDerivedOOPL(OPCtorParameter) CppGCtorParameterD
  1462.  
  1463. selfPromoter OPCtorParameter {this} {
  1464.     CppGCtorParameterD promote $this
  1465. }
  1466. #---------------------------------------------------------------------------
  1467. #      File:           @(#)cppgdataat.tcl    /main/titanic/16
  1468. #---------------------------------------------------------------------------
  1469.  
  1470. # Start user added include file section
  1471. # End user added include file section
  1472.  
  1473.  
  1474. Class CppGDataAttr : {CppGAttribute} {
  1475.     constructor
  1476.     method destructor
  1477.     method check
  1478.     method generate
  1479. }
  1480.  
  1481. constructor CppGDataAttr {class this name} {
  1482.     set this [CppGAttribute::constructor $class $this $name]
  1483.     # Start constructor user section
  1484.     # End constructor user section
  1485.     return $this
  1486. }
  1487.  
  1488. method CppGDataAttr::destructor {this} {
  1489.     # Start destructor user section
  1490.     # End destructor user section
  1491. }
  1492.  
  1493. method CppGDataAttr::check {this} {
  1494.     set errorCnt 0
  1495.     if {(![$this isNullable]) && ([$this getInitialValue]!="")} {
  1496.         set clName [[$this ooplClass] getName]
  1497.         set attrName [$this getName]
  1498.         m4_warning $W_NONULLDEFAULT $clName $attrName
  1499.     }
  1500.     incr errorCnt [[$this ooplType] check]
  1501.     return $errorCnt
  1502. }
  1503.  
  1504. method CppGDataAttr::generate {this class} {
  1505.     set type [[$this ooplType] generate [$class model]]
  1506.     set accessTxt [$this getPropertyValue "attrib_access"]
  1507.     set visibility [$this getPropertyValue "attrib_visibility"]
  1508.     if {$visibility == ""} {
  1509.         set visibility "Private"
  1510.     }
  1511.     set attr [CppUserAttrib new $class $visibility $type]
  1512.     $attr name [$this getName]
  1513.     $attr comment [$this getFreeText]
  1514.     set defValue [$this getInitialValue]
  1515.     if {![$this isNullable] && ($defValue!="")} {
  1516.         set defValue ""
  1517.         m4_warning $W_NONULLDEFAULT [$class name] [$attr name]
  1518.     }
  1519.     if {$defValue != ""} {
  1520.         $attr defaultValue $defValue
  1521.         if {! [$this isClassFeature]} {
  1522.             set ctor ""
  1523.             [$class featureSet] foreach feature {
  1524.                 if [$feature isA CppConstructor] {
  1525.                     set ctor $feature
  1526.                     break
  1527.                 }
  1528.             }
  1529.             
  1530.             if {$ctor != ""} {
  1531.                 if {[$type name] == "char" && [$type isArray] } {
  1532.                     $class addExtIncl "string.h"
  1533.                     set ctorSect [CppGenCode new $ctor]
  1534.                     $ctorSect append "strcpy ([$this getName], $defValue);\n"
  1535.                 } else {
  1536.                     set init [CppInitializer new $ctor]
  1537.                     $init name [$this getName]
  1538.                     set initVal [CppInitValue new $init]
  1539.                     if [regexp {\((.*)\)} $defValue mtv expression] {
  1540.                         $initVal value $expression
  1541.                     } else {
  1542.                         $initVal value $defValue
  1543.                     }
  1544.                 }
  1545.             }
  1546.         }
  1547.     }
  1548.  
  1549.     # generate get and set methods
  1550.     set firstUp [string toupper [string range [$attr name] 0 0]]
  1551.     set uName "${firstUp}[string range [$attr name] 1 end]"
  1552.  
  1553.     set accessList [split $accessTxt -]
  1554.     set readAccess [lindex $accessList 0]
  1555.     if {$readAccess == ""} {
  1556.         set readAccess "Public"
  1557.     }
  1558.     if {$readAccess != "None"} {
  1559.         set getType [[$this ooplType] generate [$class model]]
  1560.         set getMethd [CppAccMethod new $class $readAccess $getType $attr]
  1561.         $getMethd name [$getMethd getMethodName "attrib-get" [$attr name]]
  1562.         $getMethd isConst 1
  1563.         $getMethd isInline 1
  1564.         $getMethd kind "get"
  1565.  
  1566.         set getGenCodeSect [CppGenCode new $getMethd]
  1567.         $getGenCodeSect append "return [$attr name];\n"
  1568.         if [$this isClassFeature] {
  1569.             $getType isStatic 1
  1570.             $getMethd isConst 0
  1571.         }
  1572.     }
  1573.  
  1574.     set writeAccess [lindex $accessList 1]
  1575.     if {$writeAccess == ""} {
  1576.         set writeAccess "Public"
  1577.     }
  1578.     if {$writeAccess != "None"} {
  1579.         set setType [CppType new]
  1580.         set setMethd [CppAccMethod new $class $writeAccess $setType $attr]
  1581.         $setMethd name [$setMethd getMethodName "attrib-set" [$attr name]]
  1582.         $setMethd isInline 1
  1583.         $setMethd kind "set"
  1584.  
  1585.         set setPType [[$this ooplType] generate [$class model]]
  1586.         set setParam [CppParam new $setPType $setMethd]
  1587.         $setParam name "new${uName}"
  1588.  
  1589.         set setGenCodeSect [CppGenCode new $setMethd]
  1590.         if { [$type name] == "char" && [$type isArray] } {
  1591.             $class addExtIncl "string.h"
  1592.             $setGenCodeSect append "strcpy ([$attr name], new${uName});\n"
  1593.         } else {
  1594.             $setGenCodeSect append "[$attr name] = new${uName};\n"
  1595.         }
  1596.         if [$this isClassFeature] {
  1597.             $setType isStatic 1
  1598.         }
  1599.     }
  1600.  
  1601.     if [$this isClassFeature] {
  1602.         $type isStatic 1
  1603.     }
  1604.     return $attr
  1605. }
  1606.  
  1607. # Do not delete this line -- regeneration end marker
  1608.  
  1609. if [isCommand CMDataAttr] {
  1610.     Class  CppGDataAttrD : {CppGDataAttr CMDataAttr} {
  1611.     }
  1612. } else {
  1613.     Class CppGDataAttrD : {CppGDataAttr OPDataAttr} {    
  1614.     }
  1615. }
  1616.  
  1617. global mostDerivedOOPL ; set mostDerivedOOPL(OPDataAttr) CppGDataAttrD
  1618.  
  1619. selfPromoter OPDataAttr {this} {
  1620.     CppGDataAttrD promote $this
  1621. }
  1622. #---------------------------------------------------------------------------
  1623. #      File:           @(#)cppgenumty.tcl    /main/titanic/9
  1624. #---------------------------------------------------------------------------
  1625.  
  1626. # Start user added include file section
  1627. # End user added include file section
  1628.  
  1629.  
  1630. Class CppGEnumType : {CppGType} {
  1631.     constructor
  1632.     method destructor
  1633.     method check
  1634.     method checkLocal
  1635.     method generate
  1636. }
  1637.  
  1638. constructor CppGEnumType {class this name} {
  1639.     set this [CppGType::constructor $class $this $name]
  1640.     # Start constructor user section
  1641.     # End constructor user section
  1642.     return $this
  1643. }
  1644.  
  1645. method CppGEnumType::destructor {this} {
  1646.     # Start destructor user section
  1647.     # End destructor user section
  1648. }
  1649.  
  1650. method CppGEnumType::check {this} {
  1651.     set errorCnt 0
  1652.     incr errorCnt [$this checkLocal]
  1653.     return $errorCnt
  1654. }
  1655.  
  1656. method CppGEnumType::checkLocal {this} {
  1657.     if {[$this ooplClass] == ""} {
  1658.         return 1
  1659.     }
  1660.     return 0
  1661. }
  1662.  
  1663. method CppGEnumType::generate {this tgt} {
  1664.     if {[$this checkLocal] > 0} {
  1665.         return ""
  1666.     }
  1667.     set cl [$tgt findDefinition [[$this ooplClass] getName]]
  1668.     if {$cl == ""} { 
  1669.         set cl [[$this ooplClass] generate $tgt]
  1670.         $cl isSynthetic 1
  1671.     }
  1672.     set type [CppType new]
  1673.     $type localType $cl
  1674.     return $type
  1675. }
  1676.  
  1677. # Do not delete this line -- regeneration end marker
  1678.  
  1679. if [isCommand CMEnumType] {
  1680.     Class  CppGEnumTypeD : {CppGEnumType CMEnumType} {
  1681.     }
  1682. } else {
  1683.     Class CppGEnumTypeD : {CppGEnumType OPEnumType} {    
  1684.     }
  1685. }
  1686.  
  1687. global mostDerivedOOPL ; set mostDerivedOOPL(OPEnumType) CppGEnumTypeD
  1688.  
  1689. selfPromoter OPEnumType {this} {
  1690.     CppGEnumTypeD promote $this
  1691. }
  1692. #---------------------------------------------------------------------------
  1693. #      File:           @(#)cppginhgro.tcl    /main/titanic/11
  1694. #---------------------------------------------------------------------------
  1695.  
  1696. # Start user added include file section
  1697. # End user added include file section
  1698.  
  1699.  
  1700. Class CppGInhGroup : {Object} {
  1701.     constructor
  1702.     method destructor
  1703.     method check
  1704.     method checkLocal
  1705.     method generate
  1706. }
  1707.  
  1708. constructor CppGInhGroup {class this} {
  1709.     # Start constructor user section
  1710.     # End constructor user section
  1711.     return $this
  1712. }
  1713.  
  1714. method CppGInhGroup::destructor {this} {
  1715.     # Start destructor user section
  1716.     # End destructor user section
  1717. }
  1718.  
  1719. method CppGInhGroup::check {this} {
  1720.     set errorCnt 0
  1721.     incr errorCnt [$this checkLocal]
  1722.     set super [$this superClass]
  1723.     if {$super != ""} {
  1724.         incr errorCnt [$super check]
  1725.     }
  1726.     return $errorCnt
  1727. }
  1728.  
  1729. method CppGInhGroup::checkLocal {this} {
  1730.     return 0
  1731. }
  1732.  
  1733. method CppGInhGroup::generate {this cl} {
  1734.     # Note that cl is our sub class
  1735.     set accessTxt [$this getPropertyValue "inher_access"]
  1736.     set access "public"
  1737.     switch $accessTxt {
  1738.         "Public" {set access "public"}
  1739.         "Protected" {set access "protected"}
  1740.         "Private" {set access "private"}
  1741.         default {set access "public"}
  1742.     }
  1743.     set tgt [$cl model]
  1744.  
  1745.     set super [$this superClass]
  1746.     set supercl [$tgt findDefinition [$super getName]]
  1747.     if {$supercl == ""} {
  1748.         set supercl [$super generate $tgt]
  1749.         $supercl isSynthetic 1
  1750.     }
  1751.     set gen [CppGen new $supercl $access]
  1752.     if [$this isOverlapping] {
  1753.         $gen isVirtual 1
  1754.     }
  1755.     $cl addGen $gen
  1756.     return $gen
  1757. }
  1758.  
  1759. # Do not delete this line -- regeneration end marker
  1760.  
  1761. if [isCommand CMInhGroup] {
  1762.     Class  CppGInhGroupD : {CppGInhGroup CMInhGroup} {
  1763.     }
  1764. } else {
  1765.     Class CppGInhGroupD : {CppGInhGroup OPInhGroup} {    
  1766.     }
  1767. }
  1768.  
  1769. global mostDerivedOOPL ; set mostDerivedOOPL(OPInhGroup) CppGInhGroupD
  1770.  
  1771. selfPromoter OPInhGroup {this} {
  1772.     CppGInhGroupD promote $this
  1773. }
  1774. #---------------------------------------------------------------------------
  1775. #      File:           @(#)cppginhkey.tcl    /main/titanic/2
  1776. #---------------------------------------------------------------------------
  1777.  
  1778. # Start user added include file section
  1779. # End user added include file section
  1780.  
  1781.  
  1782. Class CppGInhKeyInitializer : {Object} {
  1783.     constructor
  1784.     method destructor
  1785.     method check
  1786.     method generate
  1787. }
  1788.  
  1789. constructor CppGInhKeyInitializer {class this name} {
  1790.     set this [Object::constructor $class $this $name]
  1791.     # Start constructor user section
  1792.     # End constructor user section
  1793.     return $this
  1794. }
  1795.  
  1796. method CppGInhKeyInitializer::destructor {this} {
  1797.     # Start destructor user section
  1798.     # End destructor user section
  1799. }
  1800.  
  1801. method CppGInhKeyInitializer::check {this} {
  1802.     return 0
  1803. }
  1804.  
  1805. method CppGInhKeyInitializer::generate {this ctor} {
  1806.     # empty
  1807. }
  1808.  
  1809. # Do not delete this line -- regeneration end marker
  1810.  
  1811. if [isCommand CMInhKeyInitializer] {
  1812.     Class  CppGInhKeyInitializerD : {CppGInhKeyInitializer CMInhKeyInitializer} {
  1813.     }
  1814. } else {
  1815.     Class CppGInhKeyInitializerD : {CppGInhKeyInitializer OPInhKeyInitializer} {    
  1816.     }
  1817. }
  1818.  
  1819. global mostDerivedOOPL ; set mostDerivedOOPL(OPInhKeyInitializer) CppGInhKeyInitializerD
  1820.  
  1821. selfPromoter OPInhKeyInitializer {this} {
  1822.     CppGInhKeyInitializerD promote $this
  1823. }
  1824. #---------------------------------------------------------------------------
  1825. #      File:           @(#)cppglinkcl.tcl    /main/titanic/8
  1826. #---------------------------------------------------------------------------
  1827.  
  1828. # Start user added include file section
  1829. # End user added include file section
  1830.  
  1831.  
  1832. Class CppGLinkClass : {CppGClass} {
  1833.     constructor
  1834.     method destructor
  1835.     method check
  1836.     method checkLocal
  1837.     method generate
  1838. }
  1839.  
  1840. constructor CppGLinkClass {class this name} {
  1841.     set this [CppGClass::constructor $class $this $name]
  1842.     # Start constructor user section
  1843.     # End constructor user section
  1844.     return $this
  1845. }
  1846.  
  1847. method CppGLinkClass::destructor {this} {
  1848.     # Start destructor user section
  1849.     # End destructor user section
  1850. }
  1851.  
  1852. method CppGLinkClass::check {this} {
  1853.     return [$this CppGClass::check]
  1854. }
  1855.  
  1856. method CppGLinkClass::checkLocal {this} {
  1857.     return 0
  1858. }
  1859.  
  1860. method CppGLinkClass::generate {this tgt} {
  1861.     return [$this CppGClass::generate $tgt]
  1862. }
  1863.  
  1864. # Do not delete this line -- regeneration end marker
  1865.  
  1866. if [isCommand CMLinkClass] {
  1867.     Class  CppGLinkClassD : {CppGLinkClass CMLinkClass} {
  1868.     }
  1869. } else {
  1870.     Class CppGLinkClassD : {CppGLinkClass OPLinkClass} {    
  1871.     }
  1872. }
  1873.  
  1874. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkClass) CppGLinkClassD
  1875.  
  1876. selfPromoter OPLinkClass {this} {
  1877.     CppGLinkClassD promote $this
  1878. }
  1879. #---------------------------------------------------------------------------
  1880. #      File:           @(#)cppgoperat.tcl    /main/titanic/15
  1881. #---------------------------------------------------------------------------
  1882.  
  1883. # Start user added include file section
  1884. # End user added include file section
  1885.  
  1886.  
  1887. Class CppGOperation : {CppGFeature} {
  1888.     constructor
  1889.     method destructor
  1890.     method check
  1891.     method checkLocal
  1892.     method generate
  1893. }
  1894.  
  1895. constructor CppGOperation {class this name} {
  1896.     set this [CppGFeature::constructor $class $this $name]
  1897.     # Start constructor user section
  1898.     # End constructor user section
  1899.     return $this
  1900. }
  1901.  
  1902. method CppGOperation::destructor {this} {
  1903.     # Start destructor user section
  1904.     # End destructor user section
  1905. }
  1906.  
  1907. method CppGOperation::check {this} {
  1908.     set errorCnt 0
  1909.     incr errorCnt [$this checkLocal]
  1910.     foreach param [$this parameterSet] {
  1911.         incr errorCnt [$param check]
  1912.     }
  1913.     return $errorCnt
  1914. }
  1915.  
  1916. method CppGOperation::checkLocal {this} {
  1917.     set errorCnt 0
  1918.     if {[$this getName] == [[$this ooplClass] getName]} {
  1919.          m4_warning $W_USECTOR [[$this ooplClass] getName]
  1920.     }
  1921.     if {[$this isClassFeature] &&
  1922.         ([$this isAbstract] || [$this isDynBound])} {
  1923.         set name [[$this ooplClass] getName]::[$this getName]
  1924.         m4_error $E_STATICABSTRACT $name
  1925.         incr errorCnt
  1926.     }
  1927.     return $errorCnt
  1928. }
  1929.  
  1930. method CppGOperation::generate {this class} {
  1931.     set operationNameMap { 
  1932.         {"operatorDIV" "operator/"}
  1933.         {"operatorPLUS" "operator+"}
  1934.         {"operatorMIN" "operator-"}
  1935.         {"operatorASSIGN" "operator="}
  1936.         {"operatorASS_PLUS" "operator+="}
  1937.         {"operatorASS_MIN" "operator-="}
  1938.         {"operatorASS_STAR" "operator*="}
  1939.         {"operatorASS_DIV" "operator/="}
  1940.         {"operatorASS_MOD" "operator%="}
  1941.         {"operatorASS_CIRCUM" "operator^="}
  1942.         {"operatorASS_AMPER" "operator&="}
  1943.         {"operatorASS_PIPE" "operator|="}
  1944.         {"operatorASS_LSHIFT" "operator<<="}
  1945.         {"operatorASS_RSHIFT" "operator>>="}
  1946.         {"operatorEQ" "operator=="}
  1947.         {"operatorNEQ" "operator!="}
  1948.         {"operatorLE" "operator<="}
  1949.         {"operatorGE" "operator>="}
  1950.         {"operatorCOMMA" "operator,"}
  1951.         {"operatorFUNC" "operator()"}
  1952.         {"operatornew" "operator new"}
  1953.         {"operatorNEW" "operator new"}
  1954.         {"operatordelete" "operator delete"}
  1955.         {"operatorDELETE" "operator delete"}
  1956.     }
  1957.  
  1958.     if {[$this checkLocal] > 0} {
  1959.         set mthd [CppUserMethod new $class "Private" [CppType new]]
  1960.         $mthd name [$this getName]
  1961.         return $mthd
  1962.     }
  1963.  
  1964.     set access [$this getPropertyValue method_access]
  1965.     if {$access == ""} {
  1966.         set access "Public"
  1967.     }
  1968.  
  1969.     set oType [$this ooplType]
  1970.     if {$oType != ""} {
  1971.         set returnType [$oType generate [$class model]]
  1972.     } else {
  1973.         set returnType [CppType new]
  1974.         $returnType name "void"
  1975.     }
  1976.  
  1977.     switch [$this getPropertyValue "modifier"] {
  1978.         "Default" { if {[$returnType localType]!=""} {$type isReference 1} }
  1979.         "Value" {}
  1980.         "Pointer" { $returnType isPointer 1 }
  1981.         "Reference" { $returnType isReference 1 }
  1982.         "Pointer to Const" { $returnType isPointer 1 ; $returnType isConst 1 }
  1983.         "Reference to Const" { $returnType isReference 1 ; $returnType isConst 1 }
  1984.         "Other" { $returnType otherModifier [$this getPropertyValue "other_modifier"] }
  1985.     }
  1986.  
  1987.     if {[$this getName] == "type_conv"} {
  1988.         set mthd [CppUserMethod new $class $access ""]
  1989.         $mthd name [$this getName]
  1990.     } else {
  1991.         set mthd [CppUserMethod new $class $access $returnType]
  1992.         $mthd name [$this getName]
  1993.     }
  1994.  
  1995.     foreach onmap $operationNameMap {
  1996.         if {[lindex $onmap 0] == [$this getName]} {
  1997.             $mthd name [lindex $onmap 1]
  1998.             break
  1999.         }
  2000.     }
  2001.  
  2002.     $returnType isStatic [$this isClassFeature]
  2003.  
  2004.     if {[$this getName] == "type_conv"} {
  2005.         $returnType isConst 0
  2006.         $mthd name "operator [$returnType getTypeName {} {}]"
  2007.     }
  2008.  
  2009.     $mthd isConst [$this isConstFunc]
  2010.     $mthd isDynamic [$this isDynBound]
  2011.     $mthd isAbstract [$this isAbstract]
  2012.     $mthd comment [$this getPropertyValue "freeText"]
  2013.  
  2014.     if {[$this getPropertyValue "inline_method"] == "1"} {
  2015.         $mthd isInline 1 
  2016.     } 
  2017.  
  2018.     foreach param [$this parameterSet] {
  2019.         $param generate $mthd
  2020.     }
  2021.  
  2022.     return $mthd
  2023. }
  2024.  
  2025. # Do not delete this line -- regeneration end marker
  2026.  
  2027. if [isCommand CMOperation] {
  2028.     Class  CppGOperationD : {CppGOperation CMOperation} {
  2029.     }
  2030. } else {
  2031.     Class CppGOperationD : {CppGOperation OPOperation} {    
  2032.     }
  2033. }
  2034.  
  2035. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperation) CppGOperationD
  2036.  
  2037. selfPromoter OPOperation {this} {
  2038.     CppGOperationD promote $this
  2039. }
  2040. #---------------------------------------------------------------------------
  2041. #      File:           @(#)cppgoperpa.tcl    /main/titanic/11
  2042. #---------------------------------------------------------------------------
  2043.  
  2044. # Start user added include file section
  2045. # End user added include file section
  2046.  
  2047.  
  2048. Class CppGOperParameter : {CppGParameter} {
  2049.     constructor
  2050.     method destructor
  2051.     method check
  2052.     method generate
  2053. }
  2054.  
  2055. constructor CppGOperParameter {class this name} {
  2056.     set this [CppGParameter::constructor $class $this $name]
  2057.     # Start constructor user section
  2058.     # End constructor user section
  2059.     return $this
  2060. }
  2061.  
  2062. method CppGOperParameter::destructor {this} {
  2063.     # Start destructor user section
  2064.     # End destructor user section
  2065. }
  2066.  
  2067. method CppGOperParameter::check {this} {
  2068.     set errorCnt 0
  2069.     incr errorCnt [[$this ooplType] check]
  2070.     return $errorCnt
  2071. }
  2072.  
  2073. method CppGOperParameter::generate {this method} {
  2074.     set type [[$this ooplType] generate [[$method cl] model]]
  2075.     set param [CppParam new $type $method]
  2076.     switch [$this getPropertyValue "modifier"] {
  2077.         "Default" { if {[$type localType]!=""} {$type isReference 1 ; $type isConst 1} }
  2078.         "Value" {}
  2079.         "Pointer" { $type isPointer 1 }
  2080.         "Reference" { $type isReference 1 }
  2081.         "Pointer to Const" { $type isPointer 1 ; $type isConst 1 }
  2082.         "Reference to Const" { $type isReference 1 ; $type isConst 1 }
  2083.         "Other" { $type otherModifier [$this getPropertyValue "other_modifier"] }
  2084.     }
  2085.     $param name [$this getName]
  2086.     $param defaultValue [$this getPropertyValue "default_value"]
  2087.     $param comment [$this getPropertyValue "freeText"]
  2088.     return $param
  2089. }
  2090.  
  2091. # Do not delete this line -- regeneration end marker
  2092.  
  2093. if [isCommand CMOperParameter] {
  2094.     Class  CppGOperParameterD : {CppGOperParameter CMOperParameter} {
  2095.     }
  2096. } else {
  2097.     Class CppGOperParameterD : {CppGOperParameter OPOperParameter} {    
  2098.     }
  2099. }
  2100.  
  2101. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperParameter) CppGOperParameterD
  2102.  
  2103. selfPromoter OPOperParameter {this} {
  2104.     CppGOperParameterD promote $this
  2105. }
  2106. #---------------------------------------------------------------------------
  2107. #      File:           @(#)cppgqualas.tcl    /main/titanic/11
  2108. #---------------------------------------------------------------------------
  2109.  
  2110. # Start user added include file section
  2111. # End user added include file section
  2112.  
  2113.  
  2114. Class CppGQualAssocAttr : {CppGGenAssocAttr} {
  2115.     constructor
  2116.     method destructor
  2117.     method setGenerator
  2118. }
  2119.  
  2120. constructor CppGQualAssocAttr {class this name} {
  2121.     set this [CppGGenAssocAttr::constructor $class $this $name]
  2122.     # Start constructor user section
  2123.     # End constructor user section
  2124.     return $this
  2125. }
  2126.  
  2127. method CppGQualAssocAttr::destructor {this} {
  2128.     # Start destructor user section
  2129.     # End destructor user section
  2130. }
  2131.  
  2132. method CppGQualAssocAttr::setGenerator {this clss} {
  2133.     if {[$this getMultiplicity]=="one"} {
  2134.         set assImpl [CppGOneQual new]
  2135.         $assImpl attrName "[$this getName]Dict"
  2136.         $this generator $assImpl 
  2137.         set cldef [$this getClassLibDef "Dict" $clss $assImpl]
  2138.     } else {
  2139.         set assImpl [CppGManyQual new]
  2140.         $assImpl attrName "[$this getName]DictSet"
  2141.         $this generator $assImpl 
  2142.         set cldef [$this getClassLibDef "SetDict" $clss $assImpl]
  2143.     }
  2144.     $assImpl cldef $cldef
  2145. }
  2146.  
  2147. # Do not delete this line -- regeneration end marker
  2148.  
  2149. if [isCommand CMQualAssocAttr] {
  2150.     Class  CppGQualAssocAttrD : {CppGQualAssocAttr CMQualAssocAttr} {
  2151.     }
  2152. } else {
  2153.     Class CppGQualAssocAttrD : {CppGQualAssocAttr OPQualAssocAttr} {    
  2154.     }
  2155. }
  2156.  
  2157. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualAssocAttr) CppGQualAssocAttrD
  2158.  
  2159. selfPromoter OPQualAssocAttr {this} {
  2160.     CppGQualAssocAttrD promote $this
  2161. }
  2162. #---------------------------------------------------------------------------
  2163. #      File:           @(#)cppgqualin.tcl    /main/titanic/7
  2164. #---------------------------------------------------------------------------
  2165.  
  2166. # Start user added include file section
  2167. # End user added include file section
  2168.  
  2169.  
  2170. Class CppGQualInitializer : {Object} {
  2171.     constructor
  2172.     method destructor
  2173.     method check
  2174.     method generate
  2175. }
  2176.  
  2177. constructor CppGQualInitializer {class this name} {
  2178.     set this [Object::constructor $class $this $name]
  2179.     # Start constructor user section
  2180.     # End constructor user section
  2181.     return $this
  2182. }
  2183.  
  2184. method CppGQualInitializer::destructor {this} {
  2185.     # Start destructor user section
  2186.     # End destructor user section
  2187. }
  2188.  
  2189. method CppGQualInitializer::check {this} {
  2190.     return 0
  2191. }
  2192.  
  2193. method CppGQualInitializer::generate {this ctor} {
  2194.     # No initializer is created for the keys of qual assocs
  2195. }
  2196.  
  2197. # Do not delete this line -- regeneration end marker
  2198.  
  2199. if [isCommand CMQualInitializer] {
  2200.     Class  CppGQualInitializerD : {CppGQualInitializer CMQualInitializer} {
  2201.     }
  2202. } else {
  2203.     Class CppGQualInitializerD : {CppGQualInitializer OPQualInitializer} {    
  2204.     }
  2205. }
  2206.  
  2207. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualInitializer) CppGQualInitializerD
  2208.  
  2209. selfPromoter OPQualInitializer {this} {
  2210.     CppGQualInitializerD promote $this
  2211. }
  2212. #---------------------------------------------------------------------------
  2213. #      File:           @(#)cppgqualli.tcl    /main/titanic/11
  2214. #---------------------------------------------------------------------------
  2215.  
  2216. # Start user added include file section
  2217. # End user added include file section
  2218.  
  2219.  
  2220. Class CppGQualLinkAttr : {CppGGenAssocAttr} {
  2221.     constructor
  2222.     method destructor
  2223.     method setGenerator
  2224. }
  2225.  
  2226. constructor CppGQualLinkAttr {class this name} {
  2227.     set this [CppGGenAssocAttr::constructor $class $this $name]
  2228.     # Start constructor user section
  2229.     # End constructor user section
  2230.     return $this
  2231. }
  2232.  
  2233. method CppGQualLinkAttr::destructor {this} {
  2234.     # Start destructor user section
  2235.     # End destructor user section
  2236. }
  2237.  
  2238. method CppGQualLinkAttr::setGenerator {this clss} {
  2239.     set ofPart ""
  2240.     if {[$this opposite] != ""} {
  2241.         set oClassName [[[$this opposite] ooplClass] getName]
  2242.         set ofPart "Of${oClassName}"
  2243.     }
  2244.     if {[$this getMultiplicity]=="one"} {
  2245.         set assImpl [CppGOneQual new]
  2246.         $assImpl attrName "[$this getName]${ofPart}Dict"
  2247.         $this generator $assImpl 
  2248.         set cldef [$this getClassLibDef "Dict" $clss $assImpl]
  2249.     } else {
  2250.         set assImpl [CppGManyQual new]
  2251.         $assImpl attrName "[$this getName]${ofPart}DictSet"
  2252.         $this generator $assImpl 
  2253.         set cldef [$this getClassLibDef "SetDict" $clss $assImpl]
  2254.     }
  2255.     $assImpl cldef $cldef
  2256. }
  2257.  
  2258. # Do not delete this line -- regeneration end marker
  2259.  
  2260. if [isCommand CMQualLinkAttr] {
  2261.     Class  CppGQualLinkAttrD : {CppGQualLinkAttr CMQualLinkAttr} {
  2262.     }
  2263. } else {
  2264.     Class CppGQualLinkAttrD : {CppGQualLinkAttr OPQualLinkAttr} {    
  2265.     }
  2266. }
  2267.  
  2268. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualLinkAttr) CppGQualLinkAttrD
  2269.  
  2270. selfPromoter OPQualLinkAttr {this} {
  2271.     CppGQualLinkAttrD promote $this
  2272. }
  2273. #---------------------------------------------------------------------------
  2274. #      File:           @(#)cppgrevers.tcl    /main/titanic/10
  2275. #---------------------------------------------------------------------------
  2276.  
  2277. # Start user added include file section
  2278. # End user added include file section
  2279.  
  2280.  
  2281. Class CppGReverseLinkAttr : {CppGGenAssocAttr} {
  2282.     constructor
  2283.     method destructor
  2284.     method setGenerator
  2285. }
  2286.  
  2287. constructor CppGReverseLinkAttr {class this name} {
  2288.     set this [CppGGenAssocAttr::constructor $class $this $name]
  2289.     # Start constructor user section
  2290.     # End constructor user section
  2291.     return $this
  2292. }
  2293.  
  2294. method CppGReverseLinkAttr::destructor {this} {
  2295.     # Start destructor user section
  2296.     # End destructor user section
  2297. }
  2298.  
  2299. method CppGReverseLinkAttr::setGenerator {this clss} {
  2300.     set assImpl [CppGAssocOne new]
  2301.     $assImpl attrName "[$this getName]Ptr"
  2302.     $this generator $assImpl 
  2303.     set opp [$this opposite]
  2304.     if {$opp == ""} {
  2305.         set opp $this
  2306.     }
  2307.     set cldef [$opp getClassLibDef "Ptr" $clss $assImpl]
  2308.     $assImpl cldef $cldef
  2309. }
  2310.  
  2311. # Do not delete this line -- regeneration end marker
  2312.  
  2313. if [isCommand CMReverseLinkAttr] {
  2314.     Class  CppGReverseLinkAttrD : {CppGReverseLinkAttr CMReverseLinkAttr} {
  2315.     }
  2316. } else {
  2317.     Class CppGReverseLinkAttrD : {CppGReverseLinkAttr OPReverseLinkAttr} {    
  2318.     }
  2319. }
  2320.  
  2321. global mostDerivedOOPL ; set mostDerivedOOPL(OPReverseLinkAttr) CppGReverseLinkAttrD
  2322.  
  2323. selfPromoter OPReverseLinkAttr {this} {
  2324.     CppGReverseLinkAttrD promote $this
  2325. }
  2326. #---------------------------------------------------------------------------
  2327. #      File:           @(#)cppgsuperc.tcl    /main/titanic/7
  2328. #---------------------------------------------------------------------------
  2329.  
  2330. # Start user added include file section
  2331. # End user added include file section
  2332.  
  2333.  
  2334. Class CppGSuperClassInitializer : {Object} {
  2335.     constructor
  2336.     method destructor
  2337.     method check
  2338.     method generate
  2339. }
  2340.  
  2341. constructor CppGSuperClassInitializer {class this name} {
  2342.     set this [Object::constructor $class $this $name]
  2343.     # Start constructor user section
  2344.     # End constructor user section
  2345.     return $this
  2346. }
  2347.  
  2348. method CppGSuperClassInitializer::destructor {this} {
  2349.     # Start destructor user section
  2350.     # End destructor user section
  2351. }
  2352.  
  2353. method CppGSuperClassInitializer::check {this} {
  2354.     set errorCnt 0
  2355.     foreach param [$this fullParameterSet] {
  2356.         incr errorCnt [$param check]
  2357.     }
  2358.     return $errorCnt
  2359. }
  2360.  
  2361. method CppGSuperClassInitializer::generate {this ctor} {
  2362.     # Create Initializer
  2363.     set init [CppInitializer new $ctor]
  2364.     $init name [[$this ooplClass] getName]
  2365.  
  2366.     foreach param [$this fullParameterSet] {
  2367.         # Create value for this initializer
  2368.         set initVal [CppInitValue new $init]
  2369.         $initVal value [$param getName]
  2370.     }
  2371.     return $init
  2372. }
  2373.  
  2374. # Do not delete this line -- regeneration end marker
  2375.  
  2376. if [isCommand CMSuperClassInitializer] {
  2377.     Class  CppGSuperClassInitializerD : {CppGSuperClassInitializer CMSuperClassInitializer} {
  2378.     }
  2379. } else {
  2380.     Class CppGSuperClassInitializerD : {CppGSuperClassInitializer OPSuperClassInitializer} {    
  2381.     }
  2382. }
  2383.  
  2384. global mostDerivedOOPL ; set mostDerivedOOPL(OPSuperClassInitializer) CppGSuperClassInitializerD
  2385.  
  2386. selfPromoter OPSuperClassInitializer {this} {
  2387.     CppGSuperClassInitializerD promote $this
  2388. }
  2389. #---------------------------------------------------------------------------
  2390. #      File:           @(#)cppgdataba.tcl    /main/titanic/3
  2391. #---------------------------------------------------------------------------
  2392.  
  2393. # Start user added include file section
  2394. # End user added include file section
  2395.  
  2396.  
  2397. Class CppGDatabaseClass : {CppGClass} {
  2398.     constructor
  2399.     method destructor
  2400. }
  2401.  
  2402. constructor CppGDatabaseClass {class this name} {
  2403.     set this [CppGClass::constructor $class $this $name]
  2404.     # Start constructor user section
  2405.     # End constructor user section
  2406.     return $this
  2407. }
  2408.  
  2409. method CppGDatabaseClass::destructor {this} {
  2410.     # Start destructor user section
  2411.     # End destructor user section
  2412. }
  2413.  
  2414. # Do not delete this line -- regeneration end marker
  2415.  
  2416. if [isCommand CMDatabaseClass] {
  2417.     Class  CppGDatabaseClassD : {CppGDatabaseClass CMDatabaseClass} {
  2418.     }
  2419. } else {
  2420.     Class CppGDatabaseClassD : {CppGDatabaseClass OPDatabaseClass} {    
  2421.     }
  2422. }
  2423.  
  2424. global mostDerivedOOPL ; set mostDerivedOOPL(OPDatabaseClass) CppGDatabaseClassD
  2425.  
  2426. selfPromoter OPDatabaseClass {this} {
  2427.     CppGDatabaseClassD promote $this
  2428. }
  2429. #---------------------------------------------------------------------------
  2430. #      File:           @(#)cppgdbaatt.tcl    /main/titanic/3
  2431. #---------------------------------------------------------------------------
  2432.  
  2433. # Start user added include file section
  2434. # End user added include file section
  2435.  
  2436.  
  2437. Class CppGDBAAttr : {CppGAssocAttr} {
  2438.     constructor
  2439.     method destructor
  2440. }
  2441.  
  2442. constructor CppGDBAAttr {class this name} {
  2443.     set this [CppGAssocAttr::constructor $class $this $name]
  2444.     # Start constructor user section
  2445.     # End constructor user section
  2446.     return $this
  2447. }
  2448.  
  2449. method CppGDBAAttr::destructor {this} {
  2450.     # Start destructor user section
  2451.     # End destructor user section
  2452. }
  2453.  
  2454. # Do not delete this line -- regeneration end marker
  2455.  
  2456. if [isCommand CMDBAssocAttr] {
  2457.     Class  CppGDBAAttrD : {CppGDBAAttr CMDBAssocAttr} {
  2458.     }
  2459. } else {
  2460.     Class CppGDBAAttrD : {CppGDBAAttr OPDBAssocAttr} {    
  2461.     }
  2462. }
  2463.  
  2464. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBAssocAttr) CppGDBAAttrD
  2465.  
  2466. selfPromoter OPDBAssocAttr {this} {
  2467.     CppGDBAAttrD promote $this
  2468. }
  2469. #---------------------------------------------------------------------------
  2470. #      File:           @(#)cppgdbdatt.tcl    /main/titanic/3
  2471. #---------------------------------------------------------------------------
  2472.  
  2473. # Start user added include file section
  2474. # End user added include file section
  2475.  
  2476.  
  2477. Class CppGDBDAttr : {CppGDataAttr} {
  2478.     constructor
  2479.     method destructor
  2480. }
  2481.  
  2482. constructor CppGDBDAttr {class this name} {
  2483.     set this [CppGDataAttr::constructor $class $this $name]
  2484.     # Start constructor user section
  2485.     # End constructor user section
  2486.     return $this
  2487. }
  2488.  
  2489. method CppGDBDAttr::destructor {this} {
  2490.     # Start destructor user section
  2491.     # End destructor user section
  2492. }
  2493.  
  2494. # Do not delete this line -- regeneration end marker
  2495.  
  2496. if [isCommand CMDBDataAttr] {
  2497.     Class  CppGDBDAttrD : {CppGDBDAttr CMDBDataAttr} {
  2498.     }
  2499. } else {
  2500.     Class CppGDBDAttrD : {CppGDBDAttr OPDBDataAttr} {    
  2501.     }
  2502. }
  2503.  
  2504. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBDataAttr) CppGDBDAttrD
  2505.  
  2506. selfPromoter OPDBDataAttr {this} {
  2507.     CppGDBDAttrD promote $this
  2508. }
  2509. #---------------------------------------------------------------------------
  2510. #      File:           @(#)cppgdblatt.tcl    /main/titanic/3
  2511. #---------------------------------------------------------------------------
  2512.  
  2513. # Start user added include file section
  2514. # End user added include file section
  2515.  
  2516.  
  2517. Class CppGDBLAttr : {CppGLinkAttr} {
  2518.     constructor
  2519.     method destructor
  2520. }
  2521.  
  2522. constructor CppGDBLAttr {class this name} {
  2523.     set this [CppGLinkAttr::constructor $class $this $name]
  2524.     # Start constructor user section
  2525.     # End constructor user section
  2526.     return $this
  2527. }
  2528.  
  2529. method CppGDBLAttr::destructor {this} {
  2530.     # Start destructor user section
  2531.     # End destructor user section
  2532. }
  2533.  
  2534. # Do not delete this line -- regeneration end marker
  2535.  
  2536. if [isCommand CMDBLinkAttr] {
  2537.     Class  CppGDBLAttrD : {CppGDBLAttr CMDBLinkAttr} {
  2538.     }
  2539. } else {
  2540.     Class CppGDBLAttrD : {CppGDBLAttr OPDBLinkAttr} {    
  2541.     }
  2542. }
  2543.  
  2544. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBLinkAttr) CppGDBLAttrD
  2545.  
  2546. selfPromoter OPDBLinkAttr {this} {
  2547.     CppGDBLAttrD promote $this
  2548. }
  2549. #---------------------------------------------------------------------------
  2550. #      File:           @(#)cppgdblcla.tcl    /main/titanic/3
  2551. #---------------------------------------------------------------------------
  2552.  
  2553. # Start user added include file section
  2554. # End user added include file section
  2555.  
  2556.  
  2557. Class CppGDBLClass : {CppGLinkClass} {
  2558.     constructor
  2559.     method destructor
  2560. }
  2561.  
  2562. constructor CppGDBLClass {class this name} {
  2563.     set this [CppGLinkClass::constructor $class $this $name]
  2564.     # Start constructor user section
  2565.     # End constructor user section
  2566.     return $this
  2567. }
  2568.  
  2569. method CppGDBLClass::destructor {this} {
  2570.     # Start destructor user section
  2571.     # End destructor user section
  2572. }
  2573.  
  2574. # Do not delete this line -- regeneration end marker
  2575.  
  2576. if [isCommand CMDBLinkClass] {
  2577.     Class  CppGDBLClassD : {CppGDBLClass CMDBLinkClass} {
  2578.     }
  2579. } else {
  2580.     Class CppGDBLClassD : {CppGDBLClass OPDBLinkClass} {    
  2581.     }
  2582. }
  2583.  
  2584. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBLinkClass) CppGDBLClassD
  2585.  
  2586. selfPromoter OPDBLinkClass {this} {
  2587.     CppGDBLClassD promote $this
  2588. }
  2589. #---------------------------------------------------------------------------
  2590. #      File:           @(#)cppgdbqaat.tcl    /main/titanic/3
  2591. #---------------------------------------------------------------------------
  2592.  
  2593. # Start user added include file section
  2594. # End user added include file section
  2595.  
  2596.  
  2597. Class CppGDBQAAttr : {CppGQualAssocAttr} {
  2598.     constructor
  2599.     method destructor
  2600. }
  2601.  
  2602. constructor CppGDBQAAttr {class this name} {
  2603.     set this [CppGQualAssocAttr::constructor $class $this $name]
  2604.     # Start constructor user section
  2605.     # End constructor user section
  2606.     return $this
  2607. }
  2608.  
  2609. method CppGDBQAAttr::destructor {this} {
  2610.     # Start destructor user section
  2611.     # End destructor user section
  2612. }
  2613.  
  2614. # Do not delete this line -- regeneration end marker
  2615.  
  2616. if [isCommand CMDBQualAssocAttr] {
  2617.     Class  CppGDBQAAttrD : {CppGDBQAAttr CMDBQualAssocAttr} {
  2618.     }
  2619. } else {
  2620.     Class CppGDBQAAttrD : {CppGDBQAAttr OPDBQualAssocAttr} {    
  2621.     }
  2622. }
  2623.  
  2624. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBQualAssocAttr) CppGDBQAAttrD
  2625.  
  2626. selfPromoter OPDBQualAssocAttr {this} {
  2627.     CppGDBQAAttrD promote $this
  2628. }
  2629. #---------------------------------------------------------------------------
  2630. #      File:           @(#)cppgdbqlat.tcl    /main/titanic/3
  2631. #---------------------------------------------------------------------------
  2632.  
  2633. # Start user added include file section
  2634. # End user added include file section
  2635.  
  2636.  
  2637. Class CppGDBQLAttr : {CppGQualLinkAttr} {
  2638.     constructor
  2639.     method destructor
  2640. }
  2641.  
  2642. constructor CppGDBQLAttr {class this name} {
  2643.     set this [CppGQualLinkAttr::constructor $class $this $name]
  2644.     # Start constructor user section
  2645.     # End constructor user section
  2646.     return $this
  2647. }
  2648.  
  2649. method CppGDBQLAttr::destructor {this} {
  2650.     # Start destructor user section
  2651.     # End destructor user section
  2652. }
  2653.  
  2654. # Do not delete this line -- regeneration end marker
  2655.  
  2656. if [isCommand CMDBQualLinkAttr] {
  2657.     Class  CppGDBQLAttrD : {CppGDBQLAttr CMDBQualLinkAttr} {
  2658.     }
  2659. } else {
  2660.     Class CppGDBQLAttrD : {CppGDBQLAttr OPDBQualLinkAttr} {    
  2661.     }
  2662. }
  2663.  
  2664. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBQualLinkAttr) CppGDBQLAttrD
  2665.  
  2666. selfPromoter OPDBQualLinkAttr {this} {
  2667.     CppGDBQLAttrD promote $this
  2668. }
  2669. #---------------------------------------------------------------------------
  2670. #      File:           @(#)cppgdbrlat.tcl    /main/titanic/3
  2671. #---------------------------------------------------------------------------
  2672.  
  2673. # Start user added include file section
  2674. # End user added include file section
  2675.  
  2676.  
  2677. Class CppGDBRLAttr : {CppGReverseLinkAttr} {
  2678.     constructor
  2679.     method destructor
  2680. }
  2681.  
  2682. constructor CppGDBRLAttr {class this name} {
  2683.     set this [CppGReverseLinkAttr::constructor $class $this $name]
  2684.     # Start constructor user section
  2685.     # End constructor user section
  2686.     return $this
  2687. }
  2688.  
  2689. method CppGDBRLAttr::destructor {this} {
  2690.     # Start destructor user section
  2691.     # End destructor user section
  2692. }
  2693.  
  2694. # Do not delete this line -- regeneration end marker
  2695.  
  2696. if [isCommand CMDBReverseLinkAttr] {
  2697.     Class  CppGDBRLAttrD : {CppGDBRLAttr CMDBReverseLinkAttr} {
  2698.     }
  2699. } else {
  2700.     Class CppGDBRLAttrD : {CppGDBRLAttr OPDBReverseLinkAttr} {    
  2701.     }
  2702. }
  2703.  
  2704. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBReverseLinkAttr) CppGDBRLAttrD
  2705.  
  2706. selfPromoter OPDBReverseLinkAttr {this} {
  2707.     CppGDBRLAttrD promote $this
  2708. }
  2709. #---------------------------------------------------------------------------
  2710. #      File:           @(#)cppgtypede.tcl    /main/titanic/10
  2711. #---------------------------------------------------------------------------
  2712.  
  2713. # Start user added include file section
  2714. # End user added include file section
  2715.  
  2716.  
  2717. Class CppGTypeDefType : {CppGType} {
  2718.     constructor
  2719.     method destructor
  2720.     method check
  2721.     method checkLocal
  2722.     method generate
  2723. }
  2724.  
  2725. constructor CppGTypeDefType {class this name} {
  2726.     set this [CppGType::constructor $class $this $name]
  2727.     # Start constructor user section
  2728.     # End constructor user section
  2729.     return $this
  2730. }
  2731.  
  2732. method CppGTypeDefType::destructor {this} {
  2733.     # Start destructor user section
  2734.     # End destructor user section
  2735. }
  2736.  
  2737. method CppGTypeDefType::check {this} {
  2738.     set errorCnt 0
  2739.     incr errorCnt [$this checkLocal]
  2740.     if {[$this ooplClass] != ""} {
  2741.         incr errorCnt [[$this ooplClass] check]
  2742.     }
  2743.     return $errorCnt
  2744. }
  2745.  
  2746. method CppGTypeDefType::checkLocal {this} {
  2747.     if {[$this ooplClass] == ""} {
  2748.         return 1
  2749.     }
  2750.     return 0
  2751. }
  2752.  
  2753. method CppGTypeDefType::generate {this tgt} {
  2754.     set cl [$tgt findDefinition [[$this ooplClass] getName]]
  2755.     if {$cl == ""} {
  2756.         if [$this check] {
  2757.             return [CppType new]
  2758.         }
  2759.         set cl [[$this ooplClass] generate $tgt]
  2760.         $cl isSynthetic 1
  2761.     }
  2762.     set type [CppType new]
  2763.     $type localType $cl
  2764.     return $type
  2765. }
  2766.  
  2767. # Do not delete this line -- regeneration end marker
  2768.  
  2769. if [isCommand CMTypeDefType] {
  2770.     Class  CppGTypeDefTypeD : {CppGTypeDefType CMTypeDefType} {
  2771.     }
  2772. } else {
  2773.     Class CppGTypeDefTypeD : {CppGTypeDefType OPTypeDefType} {    
  2774.     }
  2775. }
  2776.  
  2777. global mostDerivedOOPL ; set mostDerivedOOPL(OPTypeDefType) CppGTypeDefTypeD
  2778.  
  2779. selfPromoter OPTypeDefType {this} {
  2780.     CppGTypeDefTypeD promote $this
  2781. }
  2782. #---------------------------------------------------------------------------
  2783. #      File:           @(#)cppgmanyqu.tcl    /main/titanic/18
  2784. #---------------------------------------------------------------------------
  2785.  
  2786. # Start user added include file section
  2787. # End user added include file section
  2788.  
  2789.  
  2790. Class CppGManyQual : {CppGAssocGen} {
  2791.     constructor
  2792.     method destructor
  2793.     method getTypeDef
  2794.     method generateInclude
  2795.     method generateAdd
  2796.     method generateGet
  2797.     method generateRemove
  2798.     method generateCtor
  2799.     method generateDtor
  2800.     method generateOppSet
  2801.     method generateOppAdd
  2802.     method generateOppRemove
  2803. }
  2804.  
  2805. constructor CppGManyQual {class this} {
  2806.     set this [CppGAssocGen::constructor $class $this]
  2807.     # Start constructor user section
  2808.     # End constructor user section
  2809.     return $this
  2810. }
  2811.  
  2812. method CppGManyQual::destructor {this} {
  2813.     # Start destructor user section
  2814.     # End destructor user section
  2815.     $this CppGAssocGen::destructor
  2816. }
  2817.  
  2818. method CppGManyQual::getTypeDef {this} {
  2819.     if [$this checkLocal] {
  2820.         return [CppType new]
  2821.     }
  2822.     set cldef [$this cldef]
  2823.     return [$cldef getTypeAttr]
  2824. }
  2825.  
  2826. method CppGManyQual::generateInclude {this class} {
  2827.     set cldef [$this cldef]
  2828.     set includeList [$cldef getIncludeList]
  2829.     lappend includeList [CppProtect::getInclude]
  2830.     foreach file $includeList {
  2831.         $class addExtIncl $file
  2832.     }
  2833. }
  2834.  
  2835. method CppGManyQual::generateAdd {this class} {
  2836.  
  2837.     set attr [$this assocAttr]
  2838.     if {$attr == "" } { return }
  2839.  
  2840.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  2841.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  2842.  
  2843.     set accessList [split [$attr getPropertyValue assoc_access] -]
  2844.     set access [lindex $accessList 1]
  2845.     if {$access == "None"} {
  2846.         return
  2847.     }
  2848.     if {$access == ""} {
  2849.         set access "Public"
  2850.     }
  2851.  
  2852.     set rtype [CppType new]
  2853.  
  2854.     set assoc [$attr cppAssocAttr]
  2855.     set methd [CppAccMethod new $class $access $rtype $assoc]
  2856.     $methd name [$methd getMethodName "assoc-add" [$attr getName]]
  2857.     $methd kind "add"
  2858.  
  2859.     set cldef [$this cldef]
  2860.  
  2861.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  2862.     if {[$ktype localType] != ""} {
  2863.         $ktype isConst 1
  2864.         $ktype isReference 1
  2865.     }
  2866.     set keyParam [CppParam new $ktype $methd]
  2867.     set keyName [[$attr qualifier] getName]
  2868.     $keyParam name $keyName
  2869.  
  2870.     set ptype [[$attr ooplType] generate [$class model]]
  2871.     $ptype isPointer 1
  2872.     set param [CppParam new $ptype $methd]
  2873.     set pname "new${uName}"
  2874.     $param name $pname
  2875.  
  2876.     set genCode [CppGenCode new $methd]
  2877.  
  2878.     if [$attr isMandatory] {
  2879.         CppProtect::genCheck $genCode "$pname!=0"
  2880.     }
  2881.  
  2882.     set oAttr [$attr opposite]
  2883.     if {$oAttr != ""} {
  2884.         set oppGenerator [$oAttr generator]
  2885.         if {$oppGenerator != ""} {
  2886.             $oppGenerator generateOppSet $genCode $this \
  2887.                 [$oppGenerator attrName] $pname [$this attrName] \
  2888.                 [$oAttr isMandatory] [$attr isMandatory]
  2889.         }
  2890.     }
  2891.  
  2892.     if {![$attr isMandatory]} {
  2893.         $genCode append "if ($pname!=0) \{\n"
  2894.         $genCode indent +
  2895.     }
  2896.     $genCode append [$cldef genAdd [$this attrName] $keyName $pname]
  2897.     $genCode append ";\n"
  2898.     if {![$attr isMandatory]} {
  2899.         $genCode indent -
  2900.         $genCode append "\}\n"
  2901.     }
  2902. }
  2903.  
  2904. method CppGManyQual::generateGet {this class} {
  2905.  
  2906.     set attr [$this assocAttr]
  2907.     if {$attr == "" } { return }
  2908.     set accessList [split [$attr getPropertyValue assoc_access] -]
  2909.     set access [lindex $accessList 0] 
  2910.     if {$access == ""} {
  2911.         set access "Public"
  2912.     }
  2913.  
  2914.     set cldef [$this cldef]
  2915.     set rtype [$cldef getTypeGet]
  2916.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  2917.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  2918.  
  2919.     set assoc [[$this assocAttr] cppAssocAttr]
  2920.     set methd [CppAccMethod new $class $access $rtype $assoc]
  2921.     $methd name [$methd getMethodName "assoc-get-set" [$attr getName]]
  2922.     $methd kind "get"
  2923.     $methd isConst 1
  2924.     $methd isInline 1
  2925.  
  2926.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  2927.     if {[$ktype localType] != ""} {
  2928.         $ktype isConst 1
  2929.         $ktype isReference 1
  2930.     }
  2931.     set keyParam [CppParam new $ktype $methd]
  2932.     set keyName [[$attr qualifier] getName]
  2933.     $keyParam name $keyName
  2934.  
  2935.     set genCode [CppGenCode new $methd]
  2936.  
  2937.     $genCode append "return "
  2938.     $genCode append [$cldef genGet [$this attrName] $keyName]
  2939.     $genCode append ";\n"
  2940. }
  2941.  
  2942. method CppGManyQual::generateRemove {this class} {
  2943.  
  2944.     set attr [$this assocAttr]
  2945.     if {$attr == "" } { return }
  2946.  
  2947.     set oAttr [$attr opposite]
  2948.     if {$oAttr != ""} {
  2949.         if {[$oAttr isMandatory] && [$oAttr getMultiplicity] != "many"} {
  2950.             m4_warning $W_NOGENREMOVE [$class getName] [$this attrName]
  2951.             return
  2952.         }
  2953.     }
  2954.  
  2955.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  2956.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  2957.  
  2958.     set accessList [split [$attr getPropertyValue assoc_access] -]
  2959.     set access [lindex $accessList 1]
  2960.     if {$access == "None"} {
  2961.         return
  2962.     }
  2963.     if {$access == ""} {
  2964.         set access "Public"
  2965.     }
  2966.  
  2967.     set rtype [CppType new]
  2968.  
  2969.     set assoc [$attr cppAssocAttr]
  2970.     set methd [CppAccMethod new $class $access $rtype $assoc]
  2971.     $methd name [$methd getMethodName "assoc-remove" [$attr getName]]
  2972.     $methd kind "remove"
  2973.  
  2974.     set cldef [$this cldef]
  2975.  
  2976.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  2977.     if {[$ktype localType] != ""} {
  2978.         $ktype isConst 1
  2979.         $ktype isReference 1
  2980.     }
  2981.     set keyParam [CppParam new $ktype $methd]
  2982.     set keyName [[$attr qualifier] getName]
  2983.     $keyParam name $keyName
  2984.  
  2985.     set ptype [[$attr ooplType] generate [$class model]]
  2986.     $ptype isPointer 1
  2987.     set param [CppParam new $ptype $methd]
  2988.     set pname "old${uName}"
  2989.     $param name $pname
  2990.  
  2991.     set genCode [CppGenCode new $methd]
  2992.  
  2993.     if {$oAttr != ""} {
  2994.         set oppGenerator [$oAttr generator]
  2995.         if {$oppGenerator != ""} {
  2996.             $oppGenerator generateOppRemove $genCode $this \
  2997.                 [$oppGenerator attrName] "this" $pname \
  2998.                 [$oAttr isMandatory] [$attr isMandatory]
  2999.         }
  3000.     }
  3001.  
  3002.     $genCode append [$cldef genRemove [$this attrName] $keyName $pname]
  3003.     $genCode append ";\n"
  3004.  
  3005.     if [$attr isMandatory] {
  3006.         CppProtect::genCheck $genCode [$cldef genIsNotEmpty [$this attrName]]
  3007.     }
  3008. }
  3009.  
  3010. method CppGManyQual::generateCtor {this class} {
  3011.     set attr [$this assocAttr]
  3012.     if {$attr == "" } { return }
  3013.     set cldef [$this cldef]
  3014.     
  3015.     [$class featureSet] foreach feature {
  3016.         if [$feature isA CppConstructor] {
  3017.             set genCode [CppGenCode new $feature]
  3018.             $genCode append [$cldef genCtor]
  3019.         }
  3020.     }
  3021. }
  3022.  
  3023. method CppGManyQual::generateDtor {this class} {
  3024.     set attr [$this assocAttr]
  3025.     if {$attr == "" } { return }
  3026.  
  3027.     set cldef [$this cldef]
  3028.     
  3029.     [$class featureSet] foreach feature {
  3030.         if [$feature isA CppDestructor] {
  3031.             set genCode [CppGenCode new $feature]
  3032.             set tmpSec [TextSection new]
  3033.             set oAttr [$attr opposite]
  3034.             if {$oAttr != ""} {
  3035.                 if [$oAttr isMandatory] {
  3036.                     CppProtect::genCheck $genCode [$cldef genIsEmpty [$this attrName]]
  3037.                 } else {
  3038.                     set oppGenerator [$oAttr generator]
  3039.                     if {$oppGenerator != ""} {
  3040.                         $oppGenerator generateOppRemove $tmpSec $this \
  3041.                             [$oppGenerator attrName] "this" {$loopVar} \
  3042.                             [$oAttr isMandatory] [$attr isMandatory]
  3043.                     }    
  3044.                     $cldef genIterator $genCode [$tmpSec contents]
  3045.                 }
  3046.             }
  3047.             $genCode append [$cldef genDtor]
  3048.         }
  3049.     }
  3050. }
  3051.  
  3052. method CppGManyQual::generateOppSet {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3053. }
  3054.  
  3055. method CppGManyQual::generateOppAdd {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3056. }
  3057.  
  3058. method CppGManyQual::generateOppRemove {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3059. }
  3060.  
  3061. # Do not delete this line -- regeneration end marker
  3062.  
  3063. #---------------------------------------------------------------------------
  3064. #      File:           @(#)cppgassoco.tcl    /main/titanic/15
  3065. #---------------------------------------------------------------------------
  3066.  
  3067. # Start user added include file section
  3068. # End user added include file section
  3069.  
  3070.  
  3071. Class CppGAssocOne : {CppGAssocGen} {
  3072.     constructor
  3073.     method destructor
  3074.     method getTypeDef
  3075.     method generateInclude
  3076.     method generateSet
  3077.     method generateGet
  3078.     method generateRemove
  3079.     method generateCtor
  3080.     method generateDtor
  3081.     method generateOppSet
  3082.     method generateOppAdd
  3083.     method generateOppRemove
  3084. }
  3085.  
  3086. constructor CppGAssocOne {class this} {
  3087.     set this [CppGAssocGen::constructor $class $this]
  3088.     # Start constructor user section
  3089.     # End constructor user section
  3090.     return $this
  3091. }
  3092.  
  3093. method CppGAssocOne::destructor {this} {
  3094.     # Start destructor user section
  3095.     # End destructor user section
  3096.     $this CppGAssocGen::destructor
  3097. }
  3098.  
  3099. method CppGAssocOne::getTypeDef {this} {
  3100.     if [$this checkLocal] {
  3101.         return [CppType new]
  3102.     }
  3103.     return [[$this cldef] getTypeAttr]
  3104. }
  3105.  
  3106. method CppGAssocOne::generateInclude {this class} {
  3107.     set includeList [[$this cldef] getIncludeList]
  3108.     lappend includeList [CppProtect::getInclude]
  3109.     foreach file $includeList {
  3110.         $class addExtIncl $file
  3111.     }
  3112. }
  3113.  
  3114. method CppGAssocOne::generateSet {this class} {
  3115.  
  3116.     set attr [$this assocAttr]
  3117.     if {$attr == "" } { return }
  3118.     set oAttr [$attr opposite]
  3119.     if {($oAttr != "") &&
  3120.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3121.         m4_warning $W_NOGENUPDATE [$class getName] [$this attrName]
  3122.         return
  3123.     }
  3124.  
  3125.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3126.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3127.  
  3128.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3129.     set access [lindex $accessList 1] 
  3130.     if {$access == "None"} {
  3131.         return
  3132.     }
  3133.     if {$access == ""} {
  3134.         set access "Public"
  3135.     }
  3136.  
  3137.     set rtype [CppType new]
  3138.  
  3139.     set assoc [$attr cppAssocAttr]
  3140.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3141.     $methd name [$methd getMethodName "assoc-set" [$attr getName]]
  3142.     $methd kind "set"
  3143.  
  3144.     set cldef [$this cldef]
  3145.  
  3146.     set ptype [[$attr ooplType] generate [$class model]]
  3147.     $ptype isPointer 1
  3148.     set param [CppParam new $ptype $methd]
  3149.     set pname "new${uName}"
  3150.     $param name $pname
  3151.  
  3152.     set genCode [CppGenCode new $methd]
  3153.  
  3154.     if [$attr isMandatory] {
  3155.         CppProtect::genCheck $genCode "$pname!=0"
  3156.     }
  3157.  
  3158.     if {$oAttr != ""} {
  3159.         set oppGenerator [$oAttr generator]
  3160.         if {$oppGenerator != ""} {
  3161.             $oppGenerator generateOppRemove $genCode $this \
  3162.                 [$oppGenerator attrName] "this" [$this attrName] \
  3163.                 [$oAttr isMandatory] [$attr isMandatory]
  3164.     
  3165.             $oppGenerator generateOppSet $genCode $this \
  3166.                 [$oppGenerator attrName] $pname [$this attrName] \
  3167.                 [$oAttr isMandatory] [$attr isMandatory]
  3168.         }
  3169.     }
  3170.  
  3171.     $genCode append [$cldef genSet [$this attrName] $pname]
  3172.     $genCode append ";\n"
  3173. }
  3174.  
  3175. method CppGAssocOne::generateGet {this class} {
  3176.  
  3177.     set attr [$this assocAttr]
  3178.     if {$attr == "" } { return }
  3179.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3180.     set access [lindex $accessList 0] 
  3181.     if {$access == ""} {
  3182.         set access "Public"
  3183.     }
  3184.  
  3185.     set cldef [$this cldef]
  3186.     set rtype [$cldef getTypeAttr]
  3187.     $rtype isConst 1
  3188.  
  3189.     set assoc [[$this assocAttr] cppAssocAttr]
  3190.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3191.     $methd name [$methd getMethodName "assoc-get" [$attr getName]]
  3192.     $methd kind "get"
  3193.     $methd isConst 1
  3194.     $methd isInline 1
  3195.  
  3196.     set genCode [CppGenCode new $methd]
  3197.     $genCode append "return "
  3198.     $genCode append [$cldef genGet [$this attrName]]
  3199.     $genCode append ";\n"
  3200. }
  3201.  
  3202. method CppGAssocOne::generateRemove {this class} {
  3203.     # equal to set..(0)
  3204. }
  3205.  
  3206. method CppGAssocOne::generateCtor {this class} {
  3207.  
  3208.     set cldef [$this cldef]
  3209.     set attr [$this assocAttr]
  3210.     if {$attr == "" } { return }
  3211.     set oAttr [$attr opposite]
  3212.  
  3213.     set pname "(&[$attr getName])"
  3214.     set aname "[$this attrName]"
  3215.  
  3216.     if {($oAttr != "") &&
  3217.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3218.         m4_warning $W_NOGENCTOR [$class getName] [$this attrName]
  3219.         return
  3220.     }
  3221.  
  3222.     [$class featureSet] foreach feature {
  3223.         if [$feature isA CppConstructor] {
  3224.             set genCode [CppGenCode new $feature]
  3225.             $genCode append [$cldef genCtor]
  3226.  
  3227.             if [$attr isMandatory] {
  3228.                 $genCode append "[$cldef genSet $aname $pname];\n"
  3229.                 set oAttr [$attr opposite]
  3230.                 if {$oAttr != ""} {
  3231.                     set oppGenerator [$oAttr generator]
  3232.                     if {$oppGenerator != ""} {
  3233.                         $oppGenerator generateOppSet $genCode $this \
  3234.                             [$oppGenerator attrName] $pname $aname \
  3235.                             [$oAttr isMandatory] [$attr isMandatory]
  3236.                     }
  3237.                 }
  3238.             }
  3239.         }
  3240.     }
  3241. }
  3242.  
  3243. method CppGAssocOne::generateDtor {this class} {
  3244.     set attr [$this assocAttr]
  3245.     if {$attr == "" } { return }
  3246.     set oAttr [$attr opposite]
  3247.     set cldef [$this cldef]
  3248.  
  3249.     if {($oAttr != "") &&
  3250.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3251.         m4_warning $W_NOGENDTOR [$class getName] [$this attrName]
  3252.         return
  3253.     }
  3254.  
  3255.     [$class featureSet] foreach feature {
  3256.         if [$feature isA CppDestructor] {
  3257.             set genCode [CppGenCode new $feature]
  3258.             set oAttr [$attr opposite]
  3259.             set aname "[$this attrName]"
  3260.             set pname "this"
  3261.             if {$oAttr != ""} {
  3262.                 set oppGenerator [$oAttr generator]
  3263.                 if {$oppGenerator != ""} {
  3264.                     $oppGenerator generateOppRemove $genCode $this \
  3265.                         [$oppGenerator attrName] $pname $aname \
  3266.                         [$oAttr isMandatory] [$attr isMandatory]
  3267.                 }
  3268.             }
  3269.             $genCode append [$cldef genDtor]
  3270.         }
  3271.     }
  3272. }
  3273.  
  3274. method CppGAssocOne::generateOppSet {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3275.  
  3276.     set cldef [$this cldef]
  3277.     set newOAttr "${paramName}->${attrName}"
  3278.     set oldOAttr "${oppAttrName}->${attrName}"
  3279.  
  3280.     if { $oppAttrMand } {
  3281.         CppProtect::genCheck $sec [$cldef genIsEmpty $newOAttr]
  3282.     } else {
  3283.         $sec append "if ([$cldef genIsNotEmpty $paramName]) \{\n"
  3284.         $sec indent +
  3285.         if { $other != "" } {
  3286.             $other generateOppRemove $sec "" \
  3287.                 $oppAttrName $paramName $newOAttr \
  3288.                 $oppAttrMand $attrMand 
  3289.         }
  3290.     }
  3291.     $sec append [$cldef genSet $newOAttr "this"]
  3292.     $sec append ";\n"
  3293.     if { ! $oppAttrMand } {
  3294.         $sec indent -
  3295.         $sec append "\}\n"
  3296.     }
  3297. }
  3298.  
  3299. method CppGAssocOne::generateOppAdd {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3300.     $this generateOppSet $sec $attrName $paramName \
  3301.         $oppAttrName $attrMand $oppAttrMand
  3302. }
  3303.  
  3304. method CppGAssocOne::generateOppRemove {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3305.     set cldef [$this cldef]
  3306.     set oAttr "${oppAttrName}->${attrName}"
  3307.  
  3308.     if { $attrMand } {
  3309.         CppProtect::genCheck $sec [$cldef genIsEmpty $oppAttrName]
  3310.     } else {
  3311.         if { ! $oppAttrMand } {
  3312.             $sec append "if ([$cldef genIsNotEmpty ${oppAttrName}]) \{\n"
  3313.             $sec indent +
  3314.         }
  3315.         $sec append [$cldef genSet $oAttr "0"]
  3316.         $sec append ";\n"
  3317.         if { ! $oppAttrMand } {
  3318.             $sec indent -
  3319.             $sec append "\}\n"
  3320.         }
  3321.     }
  3322. }
  3323.  
  3324. # Do not delete this line -- regeneration end marker
  3325.  
  3326. #---------------------------------------------------------------------------
  3327. #      File:           @(#)cppgoneopp.tcl    /main/titanic/4
  3328. #---------------------------------------------------------------------------
  3329.  
  3330. # Start user added include file section
  3331. # End user added include file section
  3332.  
  3333.  
  3334. Class CppGOneOppQual : {CppGAssocOne} {
  3335.     constructor
  3336.     method destructor
  3337.     method getTypeDef
  3338.     method generateSet
  3339.     method generateGet
  3340.     method generateRemove
  3341.     method generateCtor
  3342.     method generateDtor
  3343.     method generateOppSet
  3344.     method generateOppAdd
  3345.     method generateOppRemove
  3346. }
  3347.  
  3348. constructor CppGOneOppQual {class this} {
  3349.     set this [CppGAssocOne::constructor $class $this]
  3350.     # Start constructor user section
  3351.     # End constructor user section
  3352.     return $this
  3353. }
  3354.  
  3355. method CppGOneOppQual::destructor {this} {
  3356.     # Start destructor user section
  3357.     # End destructor user section
  3358.     $this CppGAssocOne::destructor
  3359. }
  3360.  
  3361. method CppGOneOppQual::getTypeDef {this} {
  3362.     $this CppGAssocOne::getTypeDef
  3363. }
  3364.  
  3365. method CppGOneOppQual::generateSet {this class} {
  3366.     # !! Implement this function !!
  3367. }
  3368.  
  3369. method CppGOneOppQual::generateGet {this class} {
  3370.     # !! Implement this function !!
  3371. }
  3372.  
  3373. method CppGOneOppQual::generateRemove {this class} {
  3374.     # !! Implement this function !!
  3375. }
  3376.  
  3377. method CppGOneOppQual::generateCtor {this class} {
  3378.     # !! Implement this function !!
  3379. }
  3380.  
  3381. method CppGOneOppQual::generateDtor {this class} {
  3382.     # !! Implement this function !!
  3383. }
  3384.  
  3385. method CppGOneOppQual::generateOppSet {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3386.     # !! Implement this function !!
  3387. }
  3388.  
  3389. method CppGOneOppQual::generateOppAdd {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3390.     # !! Implement this function !!
  3391. }
  3392.  
  3393. method CppGOneOppQual::generateOppRemove {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3394.     # !! Implement this function !!
  3395. }
  3396.  
  3397. # Do not delete this line -- regeneration end marker
  3398.  
  3399. #---------------------------------------------------------------------------
  3400. #      File:           @(#)cppgonequa.tcl    /main/titanic/17
  3401. #---------------------------------------------------------------------------
  3402.  
  3403. # Start user added include file section
  3404. # End user added include file section
  3405.  
  3406.  
  3407. Class CppGOneQual : {CppGAssocGen} {
  3408.     constructor
  3409.     method destructor
  3410.     method getTypeDef
  3411.     method generateInclude
  3412.     method generateSet
  3413.     method generateGet
  3414.     method generateRemove
  3415.     method generateCtor
  3416.     method generateDtor
  3417.     method generateOppSet
  3418.     method generateOppAdd
  3419.     method generateOppRemove
  3420. }
  3421.  
  3422. constructor CppGOneQual {class this} {
  3423.     set this [CppGAssocGen::constructor $class $this]
  3424.     # Start constructor user section
  3425.     # End constructor user section
  3426.     return $this
  3427. }
  3428.  
  3429. method CppGOneQual::destructor {this} {
  3430.     # Start destructor user section
  3431.     # End destructor user section
  3432.     $this CppGAssocGen::destructor
  3433. }
  3434.  
  3435. method CppGOneQual::getTypeDef {this} {
  3436.     if [$this checkLocal] {
  3437.         return [CppType new]
  3438.     }
  3439.     return [[$this cldef] getTypeAttr]
  3440. }
  3441.  
  3442. method CppGOneQual::generateInclude {this class} {
  3443.     set includeList [[$this cldef] getIncludeList]
  3444.     lappend includeList [CppProtect::getInclude]
  3445.     foreach file $includeList {
  3446.         $class addExtIncl $file
  3447.     }
  3448. }
  3449.  
  3450. method CppGOneQual::generateSet {this class} {
  3451.  
  3452.     set attr [$this assocAttr]
  3453.     if {$attr == "" } { return }
  3454.  
  3455.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3456.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3457.  
  3458.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3459.     set access [lindex $accessList 1]
  3460.     if {$access == "None"} {
  3461.         return
  3462.     }
  3463.     if {$access == ""} {
  3464.         set access "Public"
  3465.     }
  3466.  
  3467.     set rtype [CppType new]
  3468.  
  3469.     set assoc [$attr cppAssocAttr]
  3470.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3471.     $methd name [$methd getMethodName "assoc-set" [$attr getName]]
  3472.     $methd kind "set"
  3473.  
  3474.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  3475.     if {[$ktype localType] != "" } {
  3476.         $ktype isConst 1
  3477.         $ktype isReference 1
  3478.     }
  3479.     set keyParam [CppParam new $ktype $methd]
  3480.     set keyName [[$attr qualifier] getName]
  3481.     $keyParam name $keyName
  3482.  
  3483.     set ptype [[$attr ooplType] generate [$class model]]
  3484.     $ptype isPointer 1
  3485.     set param [CppParam new $ptype $methd]
  3486.     set pname "new${uName}"
  3487.     $param name $pname
  3488.  
  3489.     set genCode [CppGenCode new $methd]
  3490.  
  3491.     if [$attr isMandatory] {
  3492.         CppProtect::genCheck $genCode "$pname!=0"
  3493.     }
  3494.  
  3495.     set oAttr [$attr opposite]
  3496.     if {$oAttr != ""} {
  3497.         set oppGenerator [$oAttr generator]
  3498.         if {$oppGenerator != ""} {
  3499.             $oppGenerator generateOppSet $genCode $this \
  3500.                 [$oppGenerator attrName] $pname [$this attrName] \
  3501.                 [$oAttr isMandatory] [$attr isMandatory]
  3502.         }
  3503.     }
  3504.  
  3505.     if {![$attr isMandatory]} {
  3506.         $genCode append "if ($pname!=0) \{\n"
  3507.         $genCode indent +
  3508.     }
  3509.     $genCode append [[$this cldef] genAdd [$this attrName] $keyName $pname]
  3510.     $genCode append ";\n"
  3511.     if {![$attr isMandatory]} {
  3512.         $genCode indent -
  3513.         $genCode append "\}\n"
  3514.     }
  3515. }
  3516.  
  3517. method CppGOneQual::generateGet {this class} {
  3518.     
  3519.     set attr [$this assocAttr]
  3520.     if {$attr == "" } { return }
  3521.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3522.     set access [lindex $accessList 0] 
  3523.     if {$access == ""} {
  3524.         set access "Public"
  3525.     }
  3526.  
  3527.     set cldef [$this cldef]
  3528.  
  3529.     set rtype [$cldef getTypeGet]
  3530.  
  3531.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3532.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3533.  
  3534.     set assoc [[$this assocAttr] cppAssocAttr]
  3535.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3536.     $methd name [$methd getMethodName "assoc-get" [$attr getName]]
  3537.     $methd kind "get"
  3538.     $methd isConst 1
  3539.     $methd isInline 1
  3540.  
  3541.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  3542.     if {[$ktype localType] != "" } {
  3543.         $ktype isConst 1
  3544.         $ktype isReference 1
  3545.     }
  3546.     set keyParam [CppParam new $ktype $methd]
  3547.     set keyName [[$attr qualifier] getName]
  3548.     $keyParam name $keyName
  3549.  
  3550.     set genCode [CppGenCode new $methd]
  3551.  
  3552.     $genCode append "return "
  3553.     $genCode append [$cldef genGet [$this attrName] $keyName]
  3554.     $genCode append ";\n"
  3555. }
  3556.  
  3557. method CppGOneQual::generateRemove {this class} {
  3558.  
  3559.     set attr [$this assocAttr]
  3560.     if {$attr == "" } { return }
  3561.  
  3562.     set oAttr [$attr opposite]
  3563.     if {$oAttr != ""} {
  3564.         if {[$oAttr isMandatory] && [$oAttr getMultiplicity] != "many"} {
  3565.             m4_warning $W_NOGENREMOVE [$class getName] [$this attrName]
  3566.             return
  3567.         }
  3568.     }
  3569.  
  3570.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3571.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3572.  
  3573.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3574.     set access [lindex $accessList 1]
  3575.     if {$access == "None"} {
  3576.         return
  3577.     }
  3578.     if {$access == ""} {
  3579.         set access "Public"
  3580.     }
  3581.  
  3582.     set rtype [CppType new]
  3583.  
  3584.     set assoc [$attr cppAssocAttr]
  3585.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3586.     $methd name [$methd getMethodName "assoc-remove" [$attr getName]]
  3587.     $methd kind "remove"
  3588.  
  3589.     set cldef [$this cldef]
  3590.  
  3591.     set ktype [[[$attr qualifier] ooplType] generate [$class model]]
  3592.     if {[$ktype localType] != "" } {
  3593.         $ktype isConst 1
  3594.         $ktype isReference 1
  3595.     }
  3596.     set keyParam [CppParam new $ktype $methd]
  3597.     set keyName [[$attr qualifier] getName]
  3598.     $keyParam name $keyName
  3599.  
  3600.     set genCode [CppGenCode new $methd]
  3601.  
  3602.     if {$oAttr != ""} {
  3603.         set opptype [$cldef getTypeGet]
  3604.         $opptype isConst 0
  3605.         $opptype generate "opposite" $genCode "" ""
  3606.         $genCode append "=[$cldef genGet [$this attrName] $keyName];\n"
  3607.  
  3608.         set oppGenerator [$oAttr generator]
  3609.         if {$oppGenerator != ""} {
  3610.             $oppGenerator generateOppRemove $genCode $this \
  3611.                 [$oppGenerator attrName] "this" "opposite" \
  3612.                 [$oAttr isMandatory] [$attr isMandatory]
  3613.         }
  3614.     }
  3615.  
  3616.     $genCode append [$cldef genRemove [$this attrName] $keyName]
  3617.     $genCode append ";\n"
  3618.  
  3619.     if [$attr isMandatory] {
  3620.         CppProtect::genCheck $genCode [$cldef genIsNotEmpty [$this attrName]]
  3621.     }
  3622. }
  3623.  
  3624. method CppGOneQual::generateCtor {this class} {
  3625.     set cldef [$this cldef]
  3626.     
  3627.     [$class featureSet] foreach feature {
  3628.         if [$feature isA CppConstructor] {
  3629.             set genCode [CppGenCode new $feature]
  3630.             $genCode append [$cldef genCtor]
  3631.         }
  3632.     }
  3633. }
  3634.  
  3635. method CppGOneQual::generateDtor {this class} {
  3636.     set attr [$this assocAttr]
  3637.     if {$attr == "" } { return }
  3638.     set cldef [$this cldef]
  3639.  
  3640.     [$class featureSet] foreach feature {
  3641.         if [$feature isA CppDestructor] {
  3642.             set genCode [CppGenCode new $feature]
  3643.             set tmpSec [TextSection new]
  3644.             set oAttr [$attr opposite]
  3645.             if {$oAttr != ""} {
  3646.                 if [$oAttr isMandatory] {
  3647.                     CppProtect::genCheck $genCode [$cldef genIsEmpty [$this attrName]]
  3648.                 } else {
  3649.                     set oppGenerator [$oAttr generator]
  3650.                     if {$oppGenerator != ""} {
  3651.                         $oppGenerator generateOppRemove $tmpSec $this \
  3652.                             [$oppGenerator attrName] "this" {$loopVar} \
  3653.                             [$oAttr isMandatory] [$attr isMandatory]
  3654.                     }
  3655.  
  3656.                     $cldef genIterator $genCode [$tmpSec contents]
  3657.                 }
  3658.             }
  3659.             $genCode append [$cldef genDtor]
  3660.         }
  3661.     }
  3662. }
  3663.  
  3664. method CppGOneQual::generateOppSet {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3665. }
  3666.  
  3667. method CppGOneQual::generateOppAdd {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3668.     $this generateOppSet $sec $other $attrName $paramName \
  3669.         $oppAttrName $attrMand $oppAttrMand
  3670. }
  3671.  
  3672. method CppGOneQual::generateOppRemove {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3673. }
  3674.  
  3675. # Do not delete this line -- regeneration end marker
  3676.  
  3677. #---------------------------------------------------------------------------
  3678. #      File:           @(#)cppgassocm.tcl    /main/titanic/17
  3679. #---------------------------------------------------------------------------
  3680.  
  3681. # Start user added include file section
  3682. # End user added include file section
  3683.  
  3684.  
  3685. Class CppGAssocMany : {CppGAssocGen} {
  3686.     constructor
  3687.     method destructor
  3688.     method getTypeDef
  3689.     method generateInclude
  3690.     method generateAdd
  3691.     method generateGet
  3692.     method generateRemove
  3693.     method generateCtor
  3694.     method generateDtor
  3695.     method generateOppSet
  3696.     method generateOppAdd
  3697.     method generateOppRemove
  3698. }
  3699.  
  3700. constructor CppGAssocMany {class this} {
  3701.     set this [CppGAssocGen::constructor $class $this]
  3702.     # Start constructor user section
  3703.     # End constructor user section
  3704.     return $this
  3705. }
  3706.  
  3707. method CppGAssocMany::destructor {this} {
  3708.     # Start destructor user section
  3709.     # End destructor user section
  3710.     $this CppGAssocGen::destructor
  3711. }
  3712.  
  3713. method CppGAssocMany::getTypeDef {this} {
  3714.     if [$this checkLocal] {
  3715.         return [CppType new]
  3716.     }
  3717.     return [[$this cldef] getTypeAttr]
  3718. }
  3719.  
  3720. method CppGAssocMany::generateInclude {this class} {
  3721.     set includeList [[$this cldef] getIncludeList]
  3722.     lappend includeList [CppProtect::getInclude]
  3723.     foreach file $includeList {
  3724.         $class addExtIncl $file
  3725.     }
  3726. }
  3727.  
  3728. method CppGAssocMany::generateAdd {this class} {
  3729.  
  3730.     set attr [$this assocAttr]
  3731.     if {$attr == "" } { return }
  3732.     set oAttr [$attr opposite]
  3733.  
  3734.     if {($oAttr != "") &&
  3735.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3736.         m4_warning $W_NOGENUPDATE [$class getName] [$this attrName]
  3737.         return
  3738.     }
  3739.  
  3740.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3741.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3742.  
  3743.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3744.     set access [lindex $accessList 1]
  3745.     if {$access == "None"} {
  3746.         return
  3747.     }
  3748.     if {$access == ""} {
  3749.         set access "Public"
  3750.     }
  3751.  
  3752.     set rtype [CppType new]
  3753.  
  3754.     set assoc [$attr cppAssocAttr]
  3755.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3756.     $methd name [$methd getMethodName "assoc-add" [$attr getName]]
  3757.     $methd kind "add"
  3758.  
  3759.     set cldef [$this cldef]
  3760.  
  3761.     set ptype [[$attr ooplType] generate [$class model]]
  3762.     $ptype isPointer 1
  3763.     set param [CppParam new $ptype $methd]
  3764.     set pname "new${uName}"
  3765.     $param name $pname
  3766.  
  3767.     set genCode [CppGenCode new $methd]
  3768.  
  3769.     if [$attr isMandatory] {
  3770.         CppProtect::genCheck $genCode "$pname!=0"
  3771.     }
  3772.  
  3773.     if {$oAttr != ""} {
  3774.         set oppGenerator [$oAttr generator]
  3775.         if {$oppGenerator != ""} {
  3776.             $oppGenerator generateOppSet $genCode $this \
  3777.                 [$oppGenerator attrName] $pname [$this attrName] \
  3778.                 [$oAttr isMandatory] [$attr isMandatory]
  3779.         }
  3780.     }
  3781.  
  3782.     if {![$attr isMandatory]} {
  3783.         $genCode append "if ($pname!=0) \{\n"
  3784.         $genCode indent +
  3785.     }
  3786.     $genCode append [$cldef genAdd [$this attrName] $pname]
  3787.     $genCode append ";\n"
  3788.     if {![$attr isMandatory]} {
  3789.         $genCode indent -
  3790.         $genCode append "\}\n"
  3791.     }
  3792. }
  3793.  
  3794. method CppGAssocMany::generateGet {this class} {
  3795.  
  3796.     set attr [$this assocAttr]
  3797.     if {$attr == "" } { return }
  3798.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3799.     set access [lindex $accessList 0] 
  3800.     if {$access == ""} {
  3801.         set access "Public"
  3802.     }
  3803.  
  3804.     set cldef [$this cldef]
  3805.  
  3806.     set rtype [$cldef getTypeGet]
  3807.     set assoc [[$this assocAttr] cppAssocAttr]
  3808.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3809.     $methd name [$methd getMethodName "assoc-get-set" [$attr getName]]
  3810.     $methd kind "get"
  3811.     $methd isConst 1
  3812.     $methd isInline 1
  3813.  
  3814.     set genCode [CppGenCode new $methd]
  3815.     $genCode append "return "
  3816.     $genCode append [$cldef genGet [$this attrName]]
  3817.     $genCode append ";\n"
  3818. }
  3819.  
  3820. method CppGAssocMany::generateRemove {this class} {
  3821.  
  3822.     set attr [$this assocAttr]
  3823.     if {$attr == "" } { return }
  3824.  
  3825.     set oAttr [$attr opposite]
  3826.     if {$oAttr != ""} {
  3827.         if {[$oAttr isMandatory] && [$oAttr getMultiplicity] != "many"} {
  3828.             m4_warning $W_NOGENREMOVE [$class getName] [$this attrName]
  3829.             return
  3830.         }
  3831.     }
  3832.     if {($oAttr != "") &&
  3833.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3834.         m4_warning $W_NOGENUPDATE [$class getName] [$this attrName]
  3835.         return
  3836.     }
  3837.  
  3838.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3839.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3840.  
  3841.     set accessList [split [$attr getPropertyValue assoc_access] -]
  3842.     set access [lindex $accessList 1]
  3843.     if {$access == "None"} {
  3844.         return
  3845.     }
  3846.     if {$access == ""} {
  3847.         set access "Public"
  3848.     }
  3849.  
  3850.     set rtype [CppType new]
  3851.  
  3852.     set assoc [$attr cppAssocAttr]
  3853.     set methd [CppAccMethod new $class $access $rtype $assoc]
  3854.     $methd name [$methd getMethodName "assoc-remove" [$attr getName]]
  3855.     $methd kind "remove"
  3856.  
  3857.     set cldef [$this cldef]
  3858.  
  3859.     set ptype [[$attr ooplType] generate [$class model]]
  3860.     $ptype isPointer 1
  3861.     set param [CppParam new $ptype $methd]
  3862.     set pname "old${uName}"
  3863.     $param name $pname
  3864.  
  3865.     set genCode [CppGenCode new $methd]
  3866.  
  3867.     if {$oAttr != ""} {
  3868.         set oppGenerator [$oAttr generator]
  3869.         if {$oppGenerator != ""} {
  3870.             $oppGenerator generateOppRemove $genCode $this \
  3871.                 [$oppGenerator attrName] "this" $pname \
  3872.                 [$oAttr isMandatory] [$attr isMandatory]
  3873.         }
  3874.     }
  3875.  
  3876.     $genCode append [$cldef genRemove [$this attrName] $pname]
  3877.     $genCode append ";\n"
  3878.  
  3879.     if [$attr isMandatory] {
  3880.         CppProtect::genCheck $genCode [$cldef genIsNotEmpty [$this attrName]]
  3881.     }
  3882. }
  3883.  
  3884. method CppGAssocMany::generateCtor {this class} {
  3885.     set attr [$this assocAttr]
  3886.     if {$attr == "" } { return }
  3887.     set oAttr [$attr opposite]
  3888.     set cldef [$this cldef]
  3889.  
  3890.     if {($oAttr != "") &&
  3891.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3892.         m4_warning $W_NOGENCTOR [$class getName] [$this attrName]
  3893.         return
  3894.     }
  3895.  
  3896.     set firstUp [string toupper [string range [$attr getName] 0 0]]
  3897.     set uName "${firstUp}[string range [$attr getName] 1 end]"
  3898.     [$class featureSet] foreach feature {
  3899.         if [$feature isA CppConstructor] {
  3900.             set genCode [CppGenCode new $feature]
  3901.             $genCode append [$cldef genCtor]
  3902.         }
  3903.     }
  3904. }
  3905.  
  3906. method CppGAssocMany::generateDtor {this class} {
  3907.     set attr [$this assocAttr]
  3908.     if {$attr == "" } { return }
  3909.     set oAttr [$attr opposite]
  3910.     set cldef [$this cldef]
  3911.  
  3912.     if {($oAttr != "") &&
  3913.         ([$oAttr isA OPQualAssocAttr] || [$oAttr isA OPQualLinkAttr])} {
  3914.         m4_warning $W_NOGENDTOR [$class getName] [$this attrName]
  3915.         return
  3916.     }
  3917.  
  3918.     [$class featureSet] foreach feature {
  3919.         if [$feature isA CppDestructor] {
  3920.             set genCode [CppGenCode new $feature]
  3921.             set tmpSec [TextSection new]
  3922.             set oAttr [$attr opposite]
  3923.             if {$oAttr != ""} {
  3924.                 if [$oAttr isMandatory] {
  3925.                     CppProtect::genCheck $genCode [$cldef genIsEmpty [$this attrName]]
  3926.                 } else {
  3927.                     set oppGenerator [$oAttr generator]
  3928.                     if {$oppGenerator != ""} {
  3929.                         $oppGenerator generateOppRemove $tmpSec $this \
  3930.                             [$oppGenerator attrName] "this" {$loopVar} \
  3931.                             [$oAttr isMandatory] [$attr isMandatory]
  3932.                     }
  3933.  
  3934.                     $cldef genIterator $genCode [$tmpSec contents]
  3935.                 }
  3936.             }
  3937.             $genCode append [$cldef genDtor]
  3938.         }
  3939.     }
  3940. }
  3941.  
  3942. method CppGAssocMany::generateOppSet {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3943.  
  3944.     $this generateOppAdd $sec $other $attrName $paramName $oppAttrName $attrMand $oppAttrMand
  3945. }
  3946.  
  3947. method CppGAssocMany::generateOppAdd {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3948.  
  3949.     set newOAttr "${paramName}->${attrName}"
  3950.     set cldef [$this cldef]
  3951.  
  3952.     if {!$oppAttrMand} {
  3953.         $sec append "if (${paramName}!=0) \{\n"
  3954.         $sec indent +
  3955.     }
  3956.     $sec append [$cldef genAdd $newOAttr "this"]
  3957.     $sec append ";\n"
  3958.     if {!$oppAttrMand} {
  3959.         $sec indent -
  3960.         $sec append "\}\n"
  3961.     }
  3962. }
  3963.  
  3964. method CppGAssocMany::generateOppRemove {this sec other attrName paramName oppAttrName attrMand oppAttrMand} {
  3965.  
  3966.     set oAttr "${oppAttrName}->${attrName}"
  3967.     set cldef [$this cldef]
  3968.  
  3969.     if { $attrMand } {
  3970.         CppProtect::genCheck $sec [$cldef genIsEmpty $oAttr]
  3971.     } else {
  3972.         if {!$oppAttrMand} {
  3973.             $sec append "if (${oppAttrName}!=0) \{\n"
  3974.             $sec indent +
  3975.         }
  3976.         $sec append [$cldef genRemove $oAttr "$paramName"]
  3977.         $sec append ";\n"
  3978.         if {!$oppAttrMand} {
  3979.             $sec indent -
  3980.             $sec append "\}\n"
  3981.         }
  3982.     }
  3983. }
  3984.  
  3985. # Do not delete this line -- regeneration end marker
  3986.  
  3987.