Salome HOME
CCAR: quelques corrections dans les ports Calcium
authorcaremoli <caremoli>
Thu, 5 Apr 2007 16:42:58 +0000 (16:42 +0000)
committercaremoli <caremoli>
Thu, 5 Apr 2007 16:42:58 +0000 (16:42 +0000)
plus pas mal d'impressions pour debug

src/DSC/DSC_Basic/DSC_i.cxx
src/DSC/DSC_Basic/DSC_interface.cxx
src/DSC/DSC_User/Datastream/AdjacentFunctor.hxx
src/DSC/DSC_User/Datastream/Calcium/Calcium.c
src/DSC/DSC_User/Datastream/Calcium/CalciumCouplingPolicy.cxx
src/DSC/DSC_User/Datastream/Calcium/CalciumCouplingPolicy.hxx
src/DSC/DSC_User/Datastream/Calcium/CalciumInterface.hxx
src/DSC/DSC_User/Datastream/GenericPort.hxx
src/DSC/DSC_User/Superv_Component_i.cxx
src/DSC/DSC_User/Superv_Component_i.hxx
src/DSC/DSC_User/uses_port.hxx

index 7312f1babd01ad359abfa103ee358463316ef1f3..41b5adcea99d584163de9052b21f18b798bcba49 100644 (file)
@@ -35,7 +35,10 @@ Engines_DSC_i(CORBA::ORB_ptr orb,
                                                          poa, 
                                                          contId, 
                                                          instanceName, 
-                                                         interfaceName) {}
+                                                         interfaceName) 
+{
+  std::cout << "--Engines_DSC_i: MARK 1 --" << instanceName << "----" << std::endl;
+}
 
 Engines_DSC_i::~Engines_DSC_i() {}
 
index faf266dbd150a44ffbb1e3c872ff710db20f534d..d96b2c5454ae7cbcde1690842fa10861bfd667fc 100644 (file)
@@ -147,6 +147,7 @@ Engines_DSC_interface::get_uses_port(const char* uses_port_name)
     Engines::DSC::BadPortType BPT;
     BPT.expected = CORBA::string_dup("Expected a uses port");
     BPT.received = CORBA::string_dup((std::string("Received a provides/none port : ")+uses_port_name).c_str());
+   std::cout << "---- DSC_Interface : MARK 1 ---- exception : " << uses_port_name << "----" << std::endl;
     throw BPT;
   }
 
@@ -155,7 +156,10 @@ Engines_DSC_interface::get_uses_port(const char* uses_port_name)
     rtn_port = new Engines::DSC::uses_port(my_ports[uses_port_name]->uses_port_refs);
   }
   else
+    {
+   std::cout << "---- DSC_Interface : MARK 2 ---- exception : " << uses_port_name << "----" << std::endl;
     throw Engines::DSC::PortNotConnected();
+    }
   
   return rtn_port;
 }
index b59c92e6b280a71fd9ee6ea7477a5e5696fc1917..76888edadab7b4791773996728d1609583f46a90 100644 (file)
@@ -51,6 +51,27 @@ template < typename T > struct AdjacentFunctor {
 
   // Suppose que les valeurs passées en paramètres sont triées par ordre croissant
   bool operator()(const T &v1) {
+    std::cout << "AdjacentFunctor: " << _minValue << _maxValue << std::endl;
+    std::cout << "AdjacentFunctor: " << _min << _max << std::endl;
+    if ( v1 <= _minValue && v1 >= _maxValue)    
+    {
+      _equal= true;
+      std::cout << "AdjacentFunctor: _equal : " << v1 << std::endl;   
+      return true; 
+    }
+    if ( v1 < _minValue )    
+    {
+      _min=v1;_minFound=true;
+      std::cout << "AdjacentFunctor: _minFound : " <<_min << std::endl;
+    }
+    else if ( v1 > _maxValue )
+    {
+      _max=v1;_maxFound=true;
+      std::cout << "AdjacentFunctor: _maxFound : " <<_max << std::endl;
+    }
+
+
+    /*
     if ( v1 < _minValue)    {
       std::cout << "EE1: _min : " << _min << std::endl;
       _min=v1;_minFound=true;
@@ -63,8 +84,9 @@ template < typename T > struct AdjacentFunctor {
       std::cout << "AdjacentFunctor: _equal : " << v1<< ", _minValue " << _minValue << ", _maxValue " << _maxValue << std::endl;   
       return true; 
     } // end if
+    */
     
-    std::cout << "AdjacentFunctor: _minFound : " <<_min << ", _maxFound " << _max << std::endl;
+    //std::cout << "AdjacentFunctor: _minFound : " <<_min << ", _maxFound " << _max << std::endl;
     return  ( _minFound && _maxFound );
   }
 
index 7560dff9a382e16488c757feb63da554cbe4e5ba..a9732b254a7741c5800f7bfb1f26c97cd303d80f 100644 (file)
@@ -58,7 +58,8 @@ typedef int bool;
     /*    std::cout << "Ptr :" << *data << std::endl;                          */ \
     /*                                                                 */ \
     /*    std::cerr << "-------- CalciumInterface(C Part) MARK 2 ------------------" << std::endl; */ \
-    *i = _i;                                                           \
+    if(mode == CP_SEQUENTIEL)   \
+      *i = _i;                                                         \
     *nRead=_nRead;                                                     \
     /*    std::cerr << "-------- CalciumInterface(C Part) MARK 3 ------------------" << std::endl; */ \
                                                                        \
@@ -87,14 +88,21 @@ CALCIUM_EXT_LECT_INTERFACE_C_(lcp,float,float,cplx,);
                       int * nRead, _type _qual * data ) {              \
     size_t _nRead;                                                     \
     long   _i=*i;                                                      \
+    fflush(stdout);           \
+    fflush(stderr);           \
+    fprintf(stderr,"Beginning of CPLxx: %s %d %f\n",nomvar,*i,*ti); \
                                                                        \
     if ( (data == NULL) || (bufferLength < 1) ) return CPNTNULL;       \
                                                                        \
     InfoType info =  ecp_lecture_##_typeName (component, mode, ti, tf, &_i,    \
                                         nomvar, bufferLength, &_nRead, \
                                         &data );                       \
-    *i = _i;                                                           \
+    if(mode == CP_SEQUENTIEL)   \
+      *i = _i;                                                 \
     *nRead=_nRead;                                                     \
+    fprintf(stderr,"End of CPLxx: %s %d \n",nomvar,*i); \
+    fflush(stdout);           \
+    fflush(stderr);           \
                                                                        \
     return info;                                                       \
   };                                                                   \
@@ -138,12 +146,18 @@ InfoType cp_fin (void * component, int code) {
                       _type _qual * data ) {                           \
                                                                        \
     /*long   _i=i;*/                                                   \
+    fflush(stdout);           \
+    fflush(stderr);           \
+    fprintf(stderr,"Beginning of CPExx: %s %d %f\n",nomvar,i,t); \
     if ( (data == NULL) || (nbelem < 1) ) return CPNTNULL;             \
     printf("cp_name : Valeur de nomvar %s\n",nomvar);  \
                                                                        \
     InfoType info =  ecp_ecriture_##_typeName (component, mode, &t, i, \
                                               nomvar, nbelem,          \
                                               data );                  \
+    fprintf(stderr,"End of CPExx: %s %d \n",nomvar,i); \
+    fflush(stdout);           \
+    fflush(stderr);           \
                                                                        \
     return info;                                                       \
   };                                                                   \
index 61693653437c541d6b40e574974da4553fc605f6..1e3ae5d4a1e33f7a76578b273e987a994f7d950c 100644 (file)
@@ -106,7 +106,9 @@ void CalciumCouplingPolicy::disconnect(bool provideLastGivenValue) {
     std::cout << "-------- CalciumCouplingPolicy::disconnect CP_ARRET  ------------------" << std::endl;
     _disconnectDirective = CalciumTypes::STOP;
   }
+  //Wakeup get data if any
+  //wakeupWaiting();
+
 //   if (waitingForAnyDataId || waitingForConvenientDataId);
 //        cond_instance.signal();
        
index 5e2f20bfcf73cbb175044a4d54a8262f68219025..e08fcd0ae2de7e028432624b16f203ad6252adb7 100644 (file)
@@ -124,6 +124,7 @@ public:
   TimeType getEffectiveTime(TimeType ti, TimeType tf);
 
   void disconnect(bool provideLastGivenValue);
+  virtual void wakeupWaiting(){};
 
 }; //Fin de CalciumCouplingPolicy
 
@@ -244,7 +245,11 @@ bool CalciumCouplingPolicy::isDataIdConveniant( AssocContainer & storedDatas, co
   typedef typename AssocContainer::key_type key_type;
   AdjacentFunctor< key_type > af(expectedDataId);
   if ( _dependencyType == CalciumTypes::TIME_DEPENDENCY )
+  {
+    std::cout << "-------- time expected : " << expectedDataId.first << std::endl;
+    std::cout << "-------- time expected corrected : " << expectedDataId.first*(1.0-_deltaT) << std::endl;
     af.setMaxValue(key_type(expectedDataId.first*(1.0-_deltaT),0));
+  }
   isBounded = false;
 
   // Rem 1 :
@@ -264,8 +269,9 @@ bool CalciumCouplingPolicy::isDataIdConveniant( AssocContainer & storedDatas, co
   // Un codage en reverse serait plus efficace
   typename AssocContainer::iterator prev    = storedDatas.begin();
   typename AssocContainer::iterator current = prev;
-  while ( (current != storedDatas.end()) &&
-         !af(current->first)  ) {
+  while ( (current != storedDatas.end()) && !af(current->first)  ) 
+  {
+    std::cout << "------- stored time : " << current->first << std::endl;
     //  if ( af(current->first) ) break;
     prev = current++;
   }
index fa26c7d04691a1219938ae3b09da204c2f26fa7f..c7cf475ff9b4b29b03d7377e760f63884b6eed94 100644 (file)
@@ -448,12 +448,14 @@ ecp_fin_ (void * component, int code) {
     double         _tf=*tf;                                            \
     size_t         _nRead=0;                                           \
     size_t         _bufferLength=bufferLength;                         \
-                                                                       \
+    CalciumTypes::DependencyType _dependencyType=     \
+          static_cast<CalciumTypes::DependencyType>(dependencyType);                                                   \
+                                                                                  \
     if ( IsSameType< _name , cplx >::value ) _bufferLength*=2;         \
     std::cout << "-------- CalciumInterface(lecture Inter Part) MARK 1 ------------------" << std::endl; \
     try {                                                              \
       CalciumInterface::ecp_lecture< _type, _name >( *_component,      \
-                                                    static_cast<CalciumTypes::DependencyType>(dependencyType), \
+                                                    _dependencyType, \
                                                     _ti, _tf, *i,      \
                                                     nomvar,            \
                                                     _bufferLength, _nRead, *data); \
@@ -466,7 +468,8 @@ ecp_fin_ (void * component, int code) {
       std::cout << "-------- CalciumInterface(lecture Inter Part) _nRead  : " << _nRead << std::endl; \
       std::cout << "-------- CalciumInterface(lecture Inter Part) *nRead  : " << *nRead << std::endl; \
     } else *nRead = _nRead;                                            \
-    *ti=(CalTimeType< _type _qual >::TimeType)(_ti);                   \
+    if (_dependencyType == CalciumTypes::CP_SEQUENTIEL ) \
+        *ti=(CalTimeType< _type _qual >::TimeType)(_ti);                       \
     std::cout << "-------- CalciumInterface(lecture Inter Part), Data Ptr :" << *data << std::endl; \
     for (int i=0; i<_nRead;++i)                                                \
       printf("-------- CalciumInterface(lecture Inter Part), Valeur de data (typage entier) data[%d] : %d \n",i,(*data)[i]); \
index bed1d8c53bc9b8c56878abde59512bafc4bdb16a..9c63ec5deaf8c9244c427eb3e9ede1e183a545a1 100644 (file)
@@ -67,6 +67,7 @@ public:
   template <typename TimeType,typename TagType> DataType get(TimeType ti, TimeType tf, TagType tag = 0);
   template <typename TimeType,typename TagType> DataType next(TimeType &t, TagType  &tag );
   void      close (PortableServer::POA_var poa, PortableServer::ObjectId_var id);
+  void wakeupWaiting();
 
 private:
 
@@ -116,6 +117,17 @@ GenericPort<DataManipulator, COUPLING_POLICY>::close (PortableServer::POA_var po
   poa->deactivate_object (id);
 }
 
+template < typename DataManipulator, typename COUPLING_POLICY> void
+GenericPort<DataManipulator, COUPLING_POLICY>::wakeupWaiting()
+{
+  std::cout << "-------- wakeupWaiting ------------------" << std::endl;
+  if (waitingForAnyDataId || waitingForConvenientDataId)
+  {
+    std::cout << "-------- wakeupWaiting:signal --------" << std::endl;
+    std::cout << std::flush;
+    cond_instance.signal();
+  }
+}
 
 /* Methode put_generique
  *
@@ -127,7 +139,8 @@ template < typename TimeType,typename TagType>
 void GenericPort<DataManipulator, COUPLING_POLICY>::put(CorbaInDataType dataParam, 
                                                        TimeType time, 
                                                        TagType  tag) {
-
+  fflush(stdout);
+  fflush(stderr);
   try {
     // Affichage des donnees pour DEBUGging
     cerr << "parametres emis: " << time << ", " << tag << endl;
@@ -256,6 +269,8 @@ void GenericPort<DataManipulator, COUPLING_POLICY>::put(CorbaInDataType dataPara
       // Pb2 : également si deux attentes de DataIds même différents car on n'en stocke qu'un !
       // Conclusion : Pour l'instant on ne gère pas un service multithreadé qui effectue
       // des lectures simultanées sur le même port !
+      std::cout << "-------- Put : new datas available ------------------" << std::endl;
+      fflush(stdout);fflush(stderr);
       cond_instance.signal();
     }
     std::cout << "-------- Put : MARK 12 ------------------" << std::endl;
@@ -264,6 +279,8 @@ void GenericPort<DataManipulator, COUPLING_POLICY>::put(CorbaInDataType dataPara
     storedDatas_mutex.unlock();
 
     std::cout << "-------- Put : MARK 13 ------------------" << std::endl;
+    fflush(stdout);
+    fflush(stderr);
 
   } // Catch les exceptions SALOME//C++ pour la transformer en une exception SALOME//CORBA  
   catch ( const SALOME_Exception & ex ) {
@@ -402,6 +419,8 @@ GenericPort<DataManipulator, COUPLING_POLICY>::get(TimeType time,
       std::cout << "-------- Get : MARK 11 ------------------" << std::endl;
      
       // Ici on attend que la méthode put recoive la donnée 
+      std::cout << "-------- Get : waiting datas ------------------" << std::endl;
+      fflush(stdout);fflush(stderr);
       cond_instance.wait();
 
       std::cout << "-------- Get : MARK 12 ------------------" << std::endl;
@@ -476,6 +495,8 @@ GenericPort<DataManipulator, COUPLING_POLICY>::next(TimeType &t,
       waitingForAnyDataId   = true;
       std::cout << "-------- Next : MARK 3 ------------------" << std::endl;
       // Ici on attend que la méthode put recoive la donnée 
+      std::cout << "-------- Next : waiting datas ------------------" << std::endl;
+      fflush(stdout);fflush(stderr);
       cond_instance.wait();
     
       if (lastDataIdSet) {
index 9f238a1b66b6f92e3919a97961a320706d9902bf..2892ddabf84d82972c8c0ad0201d9ab1b1e77820 100644 (file)
@@ -43,6 +43,7 @@ Superv_Component_i::Superv_Component_i(CORBA::ORB_ptr orb,
                                       bool notif) : 
   Engines_DSC_i(orb, poa, contId, instanceName, interfaceName) 
 {
+  std::cout << "--Superv_Component_i : MARK 1 ----  " << instanceName << "----" << std::endl;
   _my_basic_factory = new basic_port_factory();
   _my_palm_factory = new palm_port_factory();
   _my_calcium_factory = new calcium_port_factory();
index 37a34640e6ba76658f6a52855e754a02477b7750..1ee77c61050b0e9db8d105a5f9af652b0931b496 100644 (file)
@@ -212,7 +212,7 @@ public:
   /*!
    * Gets a port already added in the component.
    *
-   * \param provides_port_name the name of the port.
+   * \param port_name the name of the port.
    * \return a port's pointer.
    */
   template <typename SpecificPortType > 
@@ -312,6 +312,12 @@ Superv_Component_i::get_port( const char * port_name)
   SpecificPortType * retPort;
   base_port        * port;
 
+  my_superv_ports_it = my_superv_ports.find(port_name);
+  if (my_superv_ports_it == my_superv_ports.end())
+  {
+    throw PortNotDefined( LOC(OSS()<< "Port " << port_name <<" does not exist"));
+  }
+
   superv_port_t * superv_port =  my_superv_ports[port_name];
   try {
     if ( superv_port->p_ref != NULL ) {
index 93307b3b189d89d93d26cbb6b12b7ab53b6ecddf..9409219892ead1d193a5b59c2292e24e5ce731fc 100644 (file)
@@ -30,7 +30,7 @@
 #include "SALOME_Ports.hh"
 #include "DSC_Engines.hh"
 
-/*! \class provides_port
+/*! \class uses_port
  *  \brief This class implements a DSC_User uses C++ port.
  *
  *  This class is base class for all DSC_User uses port.