CSolver - enforces connector semantics


SYNOPSIS

       #include <Unidraw/csolver.h>


DESCRIPTION

       A CSolver object defines and implements a model for speci-
       fying connectivity semantics that connector subclasses can
       build upon to implement their specialized semantics.  Nor-
       mally, only one CSolver instance is used per  application,
       and only connector subclasses need access it.  The Unidraw
       class constructor initializes the csolver global to  point
       to  a  CSolver  instance  it  creates.   Thus applications
       should not instantiate CSolver directly.

       CSolver  models  a  connection  between   two   connectors
       (regardless  of their particular subclass or semantics) as
       a pair of generic connectors with a piece of CGlue  inter-
       posed.   The  CGlue characterizes the relationship between
       the connectors' centers in terms of a natural size  (which
       corresponds to the distance between the centers), elastic-
       ity, and deformation limits.  Connector subclasses specify
       their connectivity behavior with a CGlue instance and sub-
       sequently rely on the CSolver to reorient them to  conform
       to that behavior.  For example, when a pin is told to con-
       nect itself to another pin, it registers with  the  global
       csolver  a  connection  containing the two connectors (the
       pins themselves) and a piece of CGlue having zero  natural
       size, elasticity, and deformation limits.  This specifica-
       tion effectively constrains  the  connectors'  centers  to
       coincide.   The  connectivity semantics of other connector
       combinations, including those  involving  application-spe-
       cific connectors, must be specified using CGlue.


PUBLIC OPERATIONS

       CSolver()
              Create a new instance.  Application programs do not
              normally instantiate CSolver explicitly.

       virtual void Connect(Connector*, Connector*, CGlue* = nil)
              Specify   a   connection  between  two  connectors,
              optionally with a piece of CGlue interposed.  Omit-
              ting  the CGlue parameter is equivalent to specify-
              ing a connection with  CGlue  having  zero  natural
              size, elasticity, and deformation limits.

       void Disconnect(Connector*, Connector*)
       void Disconnect(Connector*)
              Destroy  the  connection(s) established between two
              connectors (the two-parameter form), or destroy all
              connections to a given connector (the one-parameter
              form).
              Solve instructs the CSolver to  reorient  connected
              connectors  to conform to their connectivity seman-
              tics as reflected by its connection specifications.
              Normally  this function is called automatically and
              only in response to Unidraw::Update.

       CSolverState* GetState(Connector*)
       void SetState(CSolverState*)
              CSolverState is a class that encapsulates  all  the
              information  about  the connections in which a con-
              nector participates.  Only CSolver can create or do
              anything  with  a  CSolverState  instance. GetState
              initializes and returns a CSolverState instance for
              the  given  connector, and SetState establishes the
              connections that a CSolverState instance  specifies
              without  disturbing  existing  connections.   These
              operations are  useful  when  it  is  necessary  to
              reestablish  a  connector's  connections after they
              have been lost, for example, by removing  the  con-
              nector from the component hierarchy (as caused by a
              command to delete the component).

       void Read(istream&)
       void Write(ostream&)
              Explicitly  read/write   the   csolver's   contents
              from/to  disk.  Normally only a catalog calls these
              operations.


SEE ALSO

       Catalog(3U), GGlue(3U), Connector(3U), globals(3U)























Man(1) output converted with man2html