home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tlx501.zip / SRC / BINCON.CPP < prev    next >
C/C++ Source or Header  |  1996-07-08  |  4KB  |  125 lines

  1. /****************************************************************************
  2.     $Id: bincon.cpp 501.0 1995/03/07 12:26:08 RON Exp $
  3.  
  4.     Copyright (c) 1991-95 Tarma Software Research. All rights reserved.
  5.  
  6.     Project:    Tarma Library for C++ V5.0
  7.     Author:    Ron van der Wal
  8.  
  9.     Implementation of class TLBinCon. This class represents a binary
  10.     constraint in the CSP framework.
  11.  
  12.     $Log: bincon.cpp $
  13.     Revision 501.0  1995/03/07 12:26:08  RON
  14.     Updated for TLX 5.01
  15.     Revision 1.8  1995/01/31 16:30:04  RON
  16.     Update for release 012
  17.     Added partial support for SunPro C++ compiler
  18.     Revision 1.7  1995/01/06  15:57:24  ron
  19.     Corrected Revision keyword
  20.  
  21.     Revision 1.6  1994/11/16  15:36:19  ron
  22.     Added module info; rearranged #include directives
  23.  
  24.     Revision 1.5  1994/10/10  16:45:47  ron
  25.     Changed to <tlx\solve\csp.h>
  26.  
  27.     Revision 1.4  1994/09/28  14:13:29  ron
  28.     Removed Macintosh-style #include references
  29.  
  30.     Revision 1.3  1994/09/27  20:22:01  ron
  31.     Changed path separator from / to \
  32.  
  33.     Revision 1.2  1994/09/26  15:39:20  ron
  34.     Changed include file references
  35.  
  36.     Revision 1.1  1994/08/16  18:12:54  ron
  37.     Initial revision
  38.  
  39. ****************************************************************************/
  40.  
  41. #include <tlx\501\_build.h>
  42.  
  43. TLX_MODULE_INFO("$Revision: 501.0 $");
  44.  
  45. //----- Project headers
  46.  
  47. #include <tlx\501\solve\csp.h>
  48. #include <tlx\501\except.h>
  49.  
  50. /*-------------------------------------------------------------------------*/
  51.     TLBinCon::TLBinCon(TLVariable &v1, TLVariable &v2)
  52.  
  53. /*  Constructor accepting references to the two variables that are involved
  54.     in the constraint. The references are stored, but they are not yet
  55.     watched by the constraint.
  56. ---------------------------------------------------------------------------*/
  57. : mVar1(v1), mVar2(v2)
  58. {
  59. }
  60.  
  61. /*-------------------------------------------------------------------------*/
  62.     TLVariable &TLBinCon::OppositeOf(TLVariable &aVar)
  63.  
  64. /*  Returns the opposite of the given variable.
  65. ---------------------------------------------------------------------------*/
  66. {
  67.     TLVariable *var = &aVar;
  68.  
  69.     if (&aVar == &mVar1)
  70.     var = &mVar2;
  71.     else if (&aVar == &mVar2)
  72.     var = &mVar1;
  73.     else
  74.     THROW(TLXNotFound(LOCUS));
  75.  
  76.     return *var;
  77. }
  78.  
  79. /*-------------------------------------------------------------------------*/
  80.     const TLVariable &TLBinCon::OppositeOf(const TLVariable &aVar) const
  81.  
  82. /*  Returns the opposite of the given variable.
  83. ---------------------------------------------------------------------------*/
  84. {
  85.     const TLVariable *var = &aVar;
  86.  
  87.     if (&aVar == &mVar1)
  88.     var = &mVar2;
  89.     else if (&aVar == &mVar2)
  90.     var = &mVar1;
  91.     else
  92.     THROW(TLXNotFound(LOCUS));
  93.  
  94.     return *var;
  95. }
  96.  
  97. /*-------------------------------------------------------------------------*/
  98.     void TLBinCon::UnwatchVars()
  99.  
  100. /*  Removes watches from both variables, i.e. removes the current constraint
  101.     from the list of dependent constraints of both variables involved.
  102. ---------------------------------------------------------------------------*/
  103. {
  104.     TLX_ASSERT(mVar1.Constraints().Contains(this));
  105.     TLX_ASSERT(mVar2.Constraints().Contains(this));
  106.  
  107.     mVar1.RemoveConstraint(this);
  108.     mVar2.RemoveConstraint(this);
  109. }
  110.  
  111. /*-------------------------------------------------------------------------*/
  112.     void TLBinCon::WatchVars()
  113.  
  114. /*  Sets watches on both variables, i.e. adds the current constraint to
  115.     the list of dependent constraints of both variables involved.
  116. ---------------------------------------------------------------------------*/
  117. {
  118.     TLX_ASSERT(!mVar1.Constraints().Contains(this));
  119.     TLX_ASSERT(!mVar2.Constraints().Contains(this));
  120.  
  121.     mVar1.AddConstraint(this);
  122.     mVar2.AddConstraint(this);
  123. }
  124.  
  125.