X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDriver%2FSMESHDriver.cxx;h=696c00d884afe71ea8006eacdd1aa84288c6db0b;hb=7b70ad87bf8f5c46b2751f94cd196932b9ae7122;hp=2bd13faddea032c3ec382a7974cae544bcd613dd;hpb=3973ceea250d2a077cdb5a798eb7c6151fa9c568;p=modules%2Fsmesh.git diff --git a/src/Driver/SMESHDriver.cxx b/src/Driver/SMESHDriver.cxx index 2bd13fadd..696c00d88 100644 --- a/src/Driver/SMESHDriver.cxx +++ b/src/Driver/SMESHDriver.cxx @@ -1,113 +1,114 @@ -using namespace std; +// SMESH Driver : implementation of driver for reading and writing +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org + #include "SMESHDriver.h" #include #include -//A enlever -#include "DriverMED_R_SMESHDS_Document.h" -#include "DriverMED_R_SMESHDS_Mesh.h" -#include "DriverMED_R_SMDS_Mesh.h" -#include "DriverMED_W_SMESHDS_Document.h" -#include "DriverMED_W_SMESHDS_Mesh.h" -#include "DriverMED_W_SMDS_Mesh.h" - -#include "DriverDAT_R_SMESHDS_Document.h" -#include "DriverDAT_R_SMESHDS_Mesh.h" -#include "DriverDAT_R_SMDS_Mesh.h" -#include "DriverDAT_W_SMESHDS_Document.h" -#include "DriverDAT_W_SMESHDS_Mesh.h" -#include "DriverDAT_W_SMDS_Mesh.h" -// - -Document_Reader* SMESHDriver::GetDocumentReader(string Extension, string Class) { - if (Extension==string("MED")) { - DriverMED_R_SMESHDS_Document* myDriver = new DriverMED_R_SMESHDS_Document(); - return (myDriver); - } - else if (Extension==string("DAT")) { - DriverDAT_R_SMESHDS_Document* myDriver = new DriverDAT_R_SMESHDS_Document(); - return (myDriver); - } - else { - MESSAGE("No driver known for this extension"); - return (Document_Reader*)NULL; - } - - +Document_Reader* SMESHDriver::GetDocumentReader(string Extension) +{ + // if there is not document reader in the driver create a default + // one with the mesh reader. + Document_Reader * docReader= + (Document_Reader*)getMeshDocumentDriver(Extension); + + if(docReader==NULL) + { + Mesh_Reader * reader=GetMeshReader(Extension); + if(reader==NULL) + { + MESSAGE("No driver known for this extension"); + return NULL; + } + return new Document_Reader(reader); + } + else return docReader; } -Document_Writer* SMESHDriver::GetDocumentWriter(string Extension, string Class) { - if (Extension==string("MED")) { - DriverMED_W_SMESHDS_Document* myDriver = new DriverMED_W_SMESHDS_Document(); - return (myDriver); - } - else if (Extension==string("DAT")) { - DriverDAT_W_SMESHDS_Document* myDriver = new DriverDAT_W_SMESHDS_Document(); - return (myDriver); - } - else { - MESSAGE("No driver known for this extension"); - return (Document_Writer*)NULL; - } - - +Document_Writer* SMESHDriver::GetDocumentWriter(string Extension) +{ + Mesh_Writer * writer=GetMeshWriter(Extension); + if(writer==NULL) + { + MESSAGE("No driver known for this extension"); + return NULL; + } + return new Document_Writer(writer); } -Mesh_Reader* SMESHDriver::GetMeshReader(string Extension, string Class) { - if (Extension==string("MED")) { - - if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { - DriverMED_R_SMESHDS_Mesh* myDriver = new DriverMED_R_SMESHDS_Mesh(); - return (myDriver); - } - else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) { - DriverMED_R_SMDS_Mesh* myDriver = new DriverMED_R_SMDS_Mesh(); - return (myDriver); - } - - } - else if (Extension==string("DAT")) { - - if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { - DriverDAT_R_SMESHDS_Mesh* myDriver = new DriverDAT_R_SMESHDS_Mesh(); - return (myDriver); - } - else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) { - DriverDAT_R_SMDS_Mesh* myDriver = new DriverDAT_R_SMDS_Mesh(); - return (myDriver); - } - - } - - +Mesh_Reader* SMESHDriver::GetMeshReader(string extension) +{ + void * driver = getMeshDriver(extension, string("Reader")); + return (Mesh_Reader*)driver; } -Mesh_Writer* SMESHDriver::GetMeshWriter(string Extension, string Class) { - if (Extension==string("MED")) { - - if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { - DriverMED_W_SMESHDS_Mesh* myDriver = new DriverMED_W_SMESHDS_Mesh(); - return (myDriver); - } - else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) { - DriverMED_W_SMDS_Mesh* myDriver = new DriverMED_W_SMDS_Mesh(); - return (myDriver); - } - - } - else if (Extension==string("DAT")) { - - if (strcmp(Class.c_str(),"SMESHDS_Mesh")==0) { - DriverDAT_W_SMESHDS_Mesh* myDriver = new DriverDAT_W_SMESHDS_Mesh(); - return (myDriver); - } - else if (strcmp(Class.c_str(),"SMDS_Mesh")==0) { - DriverDAT_W_SMDS_Mesh* myDriver = new DriverDAT_W_SMDS_Mesh(); - return (myDriver); - } - - } +Mesh_Writer* SMESHDriver::GetMeshWriter(string extension) +{ + void * driver = getMeshDriver(extension, string("Writer")); + return (Mesh_Writer*)driver; +} +void * SMESHDriver::getMeshDriver(string extension, string type) +{ + string libName = string("libMeshDriver")+extension+string(".so"); + void * handle = dlopen(libName.c_str(), RTLD_LAZY); + if(!handle) + { + fputs (dlerror(), stderr); + return NULL; + } + else + { + void * (*factory)(); + string symbol = string("SMESH_create")+extension+string("Mesh")+type; + factory = (void * (*)()) dlsym(handle, symbol.c_str()); + if(factory==NULL) + { + fputs (dlerror(), stderr); + return NULL; + } + else return factory(); + } } +void * SMESHDriver::getMeshDocumentDriver(string extension) +{ + string libName = string("libMeshDriver")+extension+string(".so"); + void * handle = dlopen(libName.c_str(), RTLD_LAZY); + if(!handle) + { + fputs (dlerror(), stderr); + return NULL; + } + else + { + void * (*factory)(); + string symbol = string("SMESH_create")+extension+string("DocumentReader"); + factory = (void * (*)()) dlsym(handle, symbol.c_str()); + if(factory==NULL) + { + fputs (dlerror(), stderr); + return NULL; + } + else return factory(); + } +}