Salome HOME
update after merging trhe branches CEA_V3_0_x, OCC_V3_1_0_a1_x, and the main
[modules/med.git] / src / MEDMEM_I / MEDMEM_FieldInt_i.cxx
1 //=============================================================================
2 // File      : MEDMEM_Fieldint_i.hxx
3 // Project   : SALOME
4 // Author    : EDF 
5 // Copyright : EDF 2002
6 // $Header: /export/home/PAL/MED_SRC/src/MEDMEM_I/MEDMEM_Fieldint_i.hxx
7 //=============================================================================
8
9 #include "utilities.h"
10 #include "MEDMEM_FieldInt_i.hxx"
11 #include "MEDMEM_convert.hxx"
12 #include "SenderFactory.hxx"
13 #include "MultiCommException.hxx"
14 using namespace MEDMEM;
15
16 //=============================================================================
17 /*!
18  * Default constructor
19  */
20 //=============================================================================
21 FIELDINT_i::FIELDINT_i(): FIELD_i()
22 {
23         BEGIN_OF("Default Constructor FIELDINT_i");
24         END_OF("Default Constructor FIELDINT_i");
25 }
26 //=============================================================================
27 /*!
28  * Destructor
29  */
30 //=============================================================================
31 FIELDINT_i::~FIELDINT_i()
32 {
33         BEGIN_OF("Default Destructor FIELDINT_i");
34         END_OF("Default Destructor FIELDINT_i");
35 }
36 //=============================================================================
37 /*!
38  * Default constructor
39  */
40 //=============================================================================
41 FIELDINT_i::FIELDINT_i(::FIELD<int> * const f, bool ownCppPtr):
42   FIELD_i(f,ownCppPtr)
43 {
44         BEGIN_OF("Constructor FIELDINT_i");
45         END_OF(" Constructor FIELDINT_i");
46 }
47 //=============================================================================
48 /*!
49  * Constructor par recopie
50  */
51 //=============================================================================
52 FIELDINT_i::FIELDINT_i(FIELDINT_i &fi):FIELD_i(fi)
53 {
54         BEGIN_OF("Constructor FIELDINT_i");
55         END_OF(" Constructor FIELDINT_i");
56 }
57
58 //=============================================================================
59 /*!
60  * CORBA: Accessor for Field's values
61 */
62 //=============================================================================
63
64 SALOME_MED::long_array* FIELDINT_i::getValue( SALOME_MED::medModeSwitch mode ) 
65 throw (SALOME::SALOME_Exception)
66 {
67         if (_fieldTptr==NULL)
68                 THROW_SALOME_CORBA_EXCEPTION("No associated Field", \
69                                              SALOME::INTERNAL_ERROR);
70         SALOME_MED::long_array_var myseq = new SALOME_MED::long_array;
71         try
72           {
73             medModeSwitch modemed=convertIdlModeToMedMode(mode);
74             //      ::FIELD<int> *ptrI=dynamic_cast< ::FIELD<int>* >(_fieldTptr);
75             //the alternative is not safe but the previous one fails using the python API
76             MEDMEM::FIELD<int> *ptrI = static_cast< MEDMEM::FIELD<int>* >(_fieldTptr);
77
78             const int * values =ptrI->getValue(modemed);
79             int nbval=ptrI->getValueLength(modemed);
80             myseq->length(nbval);
81                 for (int i=0; i<nbval; i++)
82                 {
83                         myseq[i]=values[i];
84                 };
85         }
86         catch(MEDEXCEPTION &ex)
87         {
88                 MESSAGE("Unable to acces Field");
89                 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
90         }
91         return myseq._retn();
92 }
93 //=============================================================================
94 /*!
95  * CORBA: Accessor for Field's values
96 */
97 //=============================================================================
98
99 SALOME::SenderInt_ptr FIELDINT_i::getSenderForValue( SALOME_MED::medModeSwitch mode ) 
100 throw (SALOME::SALOME_Exception)
101 {
102         if (_fieldTptr==NULL)
103                 THROW_SALOME_CORBA_EXCEPTION("No associated Field", \
104                                              SALOME::INTERNAL_ERROR);
105         SALOME::SenderInt_ptr ret;
106         try
107         {
108                 medModeSwitch modemed=convertIdlModeToMedMode(mode);
109                 //::FIELD<int> *ptrI=dynamic_cast< ::FIELD<int>* >(_fieldTptr);
110                 //the alternative is not safe but the previous one fails using the python API
111                 MEDMEM::FIELD<int> *ptrI=static_cast< MEDMEM::FIELD<int>* >(_fieldTptr);
112                 const int * values =ptrI->getValue(modemed);
113                 int nbval=ptrI->getValueLength(modemed);
114                 ret=SenderFactory::buildSender(*this,values,nbval);
115         }
116         catch(MEDEXCEPTION &ex)
117         {
118                 MESSAGE("Unable to acces Field");
119                 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
120         }
121         return ret;
122 }