home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / csoopl.tcl < prev    next >
Text File  |  1997-09-05  |  2KB  |  74 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            : @(#)csoopl.tcl    /main/titanic/4 5 Sep 1997
  17. #       Original date   : Fri Sep  5 12:02:36 MET DST 1997
  18. #       Description     : Constraint satisfaction module
  19. #              OOPL derived customizations
  20. #
  21. #---------------------------------------------------------------------------
  22.  
  23. require "cgcustom.tcl"
  24. require "csconst.tcl"
  25.  
  26. Class CSOperation : [customizeOOPLModel OPOperation CSOperation] {
  27.     method generate
  28. }
  29.  
  30. method CSOperation::generate {this class} {
  31.     global CSOperation::super
  32.     set oper [$this ${CSOperation::super}::generate $class]
  33.     $oper ensure [$this getPropertyValue "ensure"]
  34.     $oper require [$this getPropertyValue "require"]
  35.     if {[$oper ensure] != "" || [$oper require] != ""} {
  36.         $class addExtIncl "ConstraintSections.hxx"
  37.     }
  38.     return $oper
  39. }
  40.  
  41. selfPromoter OPOperation {this} {
  42.     CSOperation promote $this
  43. }
  44.  
  45. Class CSDataAttr : [customizeOOPLModel OPDataAttr CSDataAttr] {
  46.     method generate
  47. }
  48.  
  49. method CSDataAttr::generate {this class} {
  50.     global CSDataAttr::super
  51.     set attr [$this ${CSDataAttr::super}::generate $class]
  52.     set assertions [$this getPropertyValue "invariant"]
  53.     if {$assertions != ""} {
  54.         $attr invariant $assertions
  55.         $class addExtIncl "ConstraintSections.hxx"
  56.         [$class featureSet] foreach f {
  57.             if [$f isA CppAccMethod] {
  58.                 if {([$f belongsTo] == $attr) &&
  59.                     ([string first "get" [$f name]] == 0)} {
  60.                     [$f genCodeSet] remove 0
  61.                     set genCode [CppGenCode new $f] 
  62.                     $genCode append "invariant(${assertions});\n"
  63.                     $genCode append "return [$attr name];\n"
  64.                 }
  65.             }
  66.         }
  67.     }
  68.     return $attr
  69. }
  70.  
  71. selfPromoter OPDataAttr {this} {
  72.     CSDataAttr promote $this
  73. }
  74.