Back to index

salome-kernel  6.5.0
Static Public Member Functions
Copy2UserSpace< false, DataManipulator > Struct Template Reference

#include <Copy2UserSpace.hxx>

List of all members.

Static Public Member Functions

template<class T1 , class T2 >
static void apply (T1 *&data, T2 &corbaData, size_t nRead)

Detailed Description

template<typename DataManipulator>
struct Copy2UserSpace< false, DataManipulator >

Definition at line 103 of file Copy2UserSpace.hxx.


Member Function Documentation

template<typename DataManipulator >
template<class T1 , class T2 >
static void Copy2UserSpace< false, DataManipulator >::apply ( T1 *&  data,
T2 &  corbaData,
size_t  nRead 
) [inline, static]

Definition at line 107 of file Copy2UserSpace.hxx.

                                                              {

    typedef typename DataManipulator::InnerType        InnerType;
    
  
#ifdef MYDEBUG
    InnerType * dataPtr = NULL;
    // Affiche la valeur du pointeur de la structure corba
    //  et les pointeurs contenus le cas échéant
    dataPtr  = DataManipulator::getPointer(corbaData,false);
    std::cerr << "-------- Copy2UserSpace<false> MARK 1a --dataPtr("<<dataPtr<<")[0.."<<
      DataManipulator::size(corbaData) <<"] : ----------------" << std::endl;
    std::copy(dataPtr,dataPtr+DataManipulator::size(corbaData),std::ostream_iterator<T1>(std::cerr," "));
    for (int i=0; i< DataManipulator::size(corbaData); ++i) 
      fprintf(stderr,"pointer[%d]=%p ",i, dataPtr[i]);
    std::cerr << std::endl;

    T1 * tmpData = data;
    //Cette affichage peut provoquer la détection d'écriture d'un espace non initailisé.
    std::cerr << "-------- Copy2UserSpace<false> MARK 1b --data("<<tmpData<<")[0.."<<
      DataManipulator::size(corbaData) <<"] : ----------------" << std::endl;
    std::copy(tmpData,tmpData+DataManipulator::size(corbaData),std::ostream_iterator<T1>(std::cerr," "));
    for (int i=0; i< DataManipulator::size(corbaData); ++i) 
      fprintf(stderr,"pointer[%d]=%p ",i, tmpData[i]);
    std::cerr << std::endl;
#endif

    // Pour les types pointeurs et ref il faut effectuer une recopie profonde.
    // On la délègue au manipulateur de données. 
      
    // Recopie des données dans le buffer allouée par l'utilisateur 
    // OU 
    // Recopie des données dans le buffer allouée par la méthode appelante (ex: lecture)
    // dans le cas d'une demande utilisateur 0 copie mais que types utilisateurs et CORBA incompatibles.
    
    //std::copy(dataPtr,dataPtr+nRead,data);
    DataManipulator::copy(corbaData,data,nRead);
      
#ifdef MYDEBUG
    tmpData = data;
    std::cerr << "-------- Copy2UserSpace<false> MARK 1c --data("<<tmpData<<")[0.."<<
      DataManipulator::size(corbaData) <<"] : ----------------" << std::endl;
    std::copy(tmpData,tmpData+DataManipulator::size(corbaData),std::ostream_iterator<T1>(std::cerr," "));
    for (int i=0; i< DataManipulator::size(corbaData); ++i) 
      fprintf(stderr,"pointer[%d]=%p ",i, tmpData[i]);
    std::cerr << std::endl;
#endif
    
  }

The documentation for this struct was generated from the following file: