Provided by: ivtools-dev_1.2.11a1-6_amd64 bug

NAME

       CSolver - enforces connector semantics

SYNOPSIS

       #include <Unidraw/csolver.h>

DESCRIPTION

       A  CSolver  object  defines  and  implements a model for specifying connectivity semantics that connector
       subclasses can build upon to implement their specialized semantics.  Normally, 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  interposed.   The  CGlue  characterizes  the
       relationship  between  the  connectors'  centers  in  terms  of  a natural size (which corresponds to the
       distance between the centers), elasticity, and deformation limits.  Connector  subclasses  specify  their
       connectivity  behavior  with  a  CGlue  instance and subsequently rely on the CSolver to reorient them to
       conform to that behavior.  For example, when a pin is told to connect 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  specification  effectively
       constrains  the  connectors'  centers  to  coincide.   The  connectivity  semantics  of  other  connector
       combinations, including those involving application-specific 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.
              Omitting  the  CGlue  parameter  is  equivalent  to specifying 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).

       void Solve()
              Solve  instructs  the  CSolver  to  reorient connected connectors to conform to their connectivity
              semantics 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
              connector 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 connector 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)