]> Creatis software - bbtk.git/blob - kernel/src/bbtkBlackBoxInputConnector.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkBlackBoxInputConnector.cxx
1 /*=========================================================================                                                                               
2   Program:   bbtk
3   Module:    $RCSfile: bbtkBlackBoxInputConnector.cxx,v $
4   Language:  C++
5   Date:      $Date: 2009/06/08 14:50:02 $
6   Version:   $Revision: 1.11 $
7 =========================================================================*/
8
9 /* ---------------------------------------------------------------------
10
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
13 *
14 *  This software is governed by the CeCILL-B license under French law and 
15 *  abiding by the rules of distribution of free software. You can  use, 
16 *  modify and/ or redistribute the software under the terms of the CeCILL-B 
17 *  license as circulated by CEA, CNRS and INRIA at the following URL 
18 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
19 *  or in the file LICENSE.txt.
20 *
21 *  As a counterpart to the access to the source code and  rights to copy,
22 *  modify and redistribute granted by the license, users are provided only
23 *  with a limited warranty  and the software's author,  the holder of the
24 *  economic rights,  and the successive licensors  have only  limited
25 *  liability. 
26 *
27 *  The fact that you are presently reading this means that you have had
28 *  knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */                                                                         
30
31
32 /**
33  *  \file 
34  *  \brief Class bbtk::BlackBoxInputConnector : 
35  */
36 #include "bbtkBlackBoxInputConnector.h"
37 #include "bbtkMessageManager.h"
38 #include "bbtkBlackBox.h"
39
40 namespace bbtk
41 {
42
43   //========================================================================
44   /// The Pimpl
45   class BlackBoxInputConnector::Pimpl
46   {
47   public:
48     Pimpl() : mConnection(0), mStatus(MODIFIED) {}
49       
50     /// 
51     BlackBoxWeakPointer mBox;
52     /// The connection plugged into the input
53     Connection* mConnection;
54     /// The status of the input (UPTODATE | MODIFIED | OUTOFDATE)
55     IOStatus mStatus;
56
57   };
58   //========================================================================
59
60   //========================================================================
61   BBTK_IMPL_PIMPL(BlackBoxInputConnector)
62   //========================================================================
63
64
65   //========================================================================
66   BlackBoxInputConnector::BlackBoxInputConnector(BlackBox::Pointer b)  
67   //: mBox(b), mConnection(0), mStatus(MODIFIED)
68   {
69     bbtkDebugMessage("kernel",9,
70                      "["<<b->bbGetName()
71                      <<"] BlackBoxInputConnector()"<<std::endl);
72     PimplConstruct();
73     p->mBox = b;
74   }
75   //========================================================================
76
77   //========================================================================
78   BlackBoxInputConnector::~BlackBoxInputConnector() 
79   {
80     bbtkDebugMessage("kernel",9,
81                      "[DEAD BOX] ~BlackBoxInputConnector()"
82                      <<std::endl);
83     PimplDestruct();
84   }
85   //========================================================================
86
87   //========================================================================
88   /// Returns the connection plugged into this input (const)
89   Connection* BlackBoxInputConnector::GetConnection() const 
90   { 
91     return p->mConnection; 
92   }
93   //========================================================================
94   
95
96   //========================================================================
97   /// Returns true iff a connection is connected to it
98     bool BlackBoxInputConnector::IsConnected() const 
99   { 
100     return (p->mConnection != 0); 
101   }
102    //========================================================================
103    
104
105    //========================================================================
106    /// Returns the status of the input 
107     IOStatus BlackBoxInputConnector::GetStatus() const 
108    { 
109      return p->mStatus; 
110    }
111   //========================================================================
112
113   //========================================================================
114     /// Sets the status of the input 
115     void BlackBoxInputConnector::SetStatus(IOStatus s) 
116     { 
117       p->mStatus = s; 
118     }
119    //========================================================================
120    
121     
122
123   //========================================================================
124     /// Returns the black box which owns the connector
125     BlackBoxPointer BlackBoxInputConnector::GetBlackBox() const 
126     { 
127       return p->mBox.lock(); 
128     } 
129
130   //========================================================================
131
132   //========================================================================
133   void BlackBoxInputConnector::SetConnection(Connection* c) 
134   { 
135     bbtkDebugMessage("kernel",9,
136                      "["<<p->mBox.lock()->bbGetName()
137                      <<"] BlackBoxInputConnector::SetConnection("<<c<<")"<<std::endl);
138     p->mConnection = c; 
139   }
140   //========================================================================
141
142   //========================================================================
143   void BlackBoxInputConnector::UnsetConnection(Connection* c) 
144   { 
145     bbtkDebugMessage("kernel",9,
146                      "["<<p->mBox.lock()->bbGetName()
147                      <<"] BlackBoxInputConnector::UnsetConnection("
148                      <<c<<")"<<std::endl);
149     p->mConnection = 0; 
150   }
151   //========================================================================
152   
153   //========================================================================
154   void BlackBoxInputConnector::RecursiveExecute()
155   {
156     // If connected and OUTOFDATE : recursive update
157     // Post-update status is updated by the connection 
158     // (either MODIFIED or OUTOFDATE)
159     if ( p->mConnection && (p->mStatus == OUTOFDATE) )
160       {
161         p->mConnection->RecursiveExecute();
162       }
163     else
164       {
165         if (!p->mBox.expired())
166           bbtkDebugMessage("process",5,"["<<p->mBox.lock()->bbGetName()
167                            <<"] --> BlackBoxInputConnector::RecursiveExecute() : "
168                            <<"No connection or input not Out-of-date : nothing to do"
169                            <<std::endl);
170         else
171           bbtkDebugMessage("process",5,
172                            "[DEAD BOX] --> BlackBoxInputConnector::RecursiveExecute() : "
173                            <<"No connection or input not Out-of-date : nothing to do"
174                            <<std::endl);
175           
176       }
177   }
178   //========================================================================
179
180 }
181 // namespace bbtk
182