00001 // Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE 00002 // 00003 // This library is free software; you can redistribute it and/or 00004 // modify it under the terms of the GNU Lesser General Public 00005 // License as published by the Free Software Foundation; either 00006 // version 2.1 of the License. 00007 // 00008 // This library is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00011 // Lesser General Public License for more details. 00012 // 00013 // You should have received a copy of the GNU Lesser General Public 00014 // License along with this library; if not, write to the Free Software 00015 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00016 // 00017 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com 00018 // 00019 00020 /* 00021 File : CalciumInterface.hxx 00022 Author : Eric Fayolle (EDF) 00023 Module : KERNEL 00024 Modified by : $LastChangedBy$ 00025 Date : $LastChangedDate: 2007-03-01 13:27:58 +0100 (jeu, 01 mar 2007) $ 00026 Id : $Id: CalciumCInterface.hxx,v 1.1.2.2.14.1.6.1 2011-06-01 13:51:41 vsr Exp $ 00027 */ 00028 #ifndef _CALCIUM_C_INTERFACE_H_ 00029 #define _CALCIUM_C_INTERFACE_H_ 00030 00031 #include "CalciumMacroCInterface.hxx" 00032 #include "CalciumTypes.hxx" 00033 #include "CalciumFortranInt.h" 00034 #include <cstdlib> 00035 00036 /* Déclaration de l'Interface entre l'API C et l'API C++ 00037 L'utilisateur CALCIUM n'a normalement pas a utliser cette interface 00038 En C/C++ il utilisera celle définie dans Calcium.c (calcium.h) 00039 2 En C++/CORBA directement celle de CalciumCxxInterface.hxx 00040 */ 00041 00042 /* En CALCIUM l'utilisation de données de type double 00043 implique des dates de type double, pour les autres 00044 types de données les dates sont de type float 00045 */ 00046 template <class T> struct CalTimeType { 00047 typedef float TimeType; 00048 }; 00049 00050 template <> struct CalTimeType<double> { 00051 typedef double TimeType; 00052 }; 00053 00054 /* Déclaration de ecp_lecture_... , ecp_ecriture_..., ecp_free_... */ 00055 00056 /* Le premier argument est utilisé : 00057 - comme suffixe dans la définition des noms ecp_lecture_ , ecp_ecriture_ et ecp_free_ 00058 Le second argument est utilisé : 00059 - comme argument template à l'appel de la méthode C++ correspondante 00060 ( le type CORBA de port correspondant est alors obtenu par un trait) 00061 Le troisième argument est utilisée : 00062 - pour typer le paramètre data de la procédure générée 00063 - pour déduire le type des paramètres t, ti tf via un trait 00064 - comme premier paramètre template à l'appel de la méthode C++ correspondante 00065 (pour typer les données passées en paramètre ) 00066 Notons que dans le cas CALCIUM_C2CPP_INTERFACE_(int,int,), le type int n'existe pas 00067 en CORBA, le port CALCIUM correspondant utilise une séquence de long. La méthode 00068 C++ CALCIUM de lecture repère cette différence de type et charge 00069 le manipulateur de données d'effectuer une recopie (qui fonctionne si les types sont compatibles). 00070 Notons qu'en CORBA CORBA:Long est mappé sur long uniquement si celui-ci est 32bits sinon 00071 il sera mappé sur le type int (si il est 32bits). Le type CORBA:LongLong est mappé sur le type long 00072 s'il est 64 bits sinon celà peut être un long long (s'il existe). 00073 */ 00074 CALCIUM_C2CPP_INTERFACE_HXX_(intc,int,int,); 00075 CALCIUM_C2CPP_INTERFACE_HXX_(long,long,long,); 00076 00077 CALCIUM_C2CPP_INTERFACE_HXX_(integer,integer,cal_int,); 00078 CALCIUM_C2CPP_INTERFACE_HXX_(int2integer,integer,int,); 00079 CALCIUM_C2CPP_INTERFACE_HXX_(long2integer,integer, long,); 00080 00081 CALCIUM_C2CPP_INTERFACE_HXX_(float,float,float, ); 00082 CALCIUM_C2CPP_INTERFACE_HXX_(double,double,double,); 00083 /* Fonctionne mais essai suivant pour simplification de Calcium.c CALCIUM_C2CPP_INTERFACE_(bool,bool,);*/ 00084 CALCIUM_C2CPP_INTERFACE_HXX_(bool,bool,int,); 00085 CALCIUM_C2CPP_INTERFACE_HXX_(cplx,cplx,float,); 00086 CALCIUM_C2CPP_INTERFACE_HXX_(str,str,char*,); 00087 00088 /* Déclaration de ecp_fin */ 00089 extern "C" CalciumTypes::InfoType ecp_fin_ (void * component, int code); 00090 extern "C" CalciumTypes::InfoType ecp_cd_ (void * component, char* instanceName); 00091 extern "C" CalciumTypes::InfoType ecp_fini_ (void * component, char* nomVar, int i); 00092 extern "C" CalciumTypes::InfoType ecp_fint_ (void * component, char* nomVar, float t); 00093 extern "C" CalciumTypes::InfoType ecp_effi_ (void * component, char* nomVar, int i); 00094 extern "C" CalciumTypes::InfoType ecp_efft_ (void * component, char* nomVar, float t); 00095 00096 #endif