]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
WIP
authorAnthony GEAY <anthony.geay@edf.fr>
Fri, 19 Feb 2021 10:40:18 +0000 (11:40 +0100)
committerAnthony GEAY <anthony.geay@edf.fr>
Fri, 19 Feb 2021 10:40:18 +0000 (11:40 +0100)
src/Container/Container_i.cxx
src/Container/SALOME_Container_i.hxx
src/DSC/DSC_User/DSC_Exception.hxx
src/NamingService/SALOME_Fake_NamingService.cxx
src/Utils/Utils_Identity.cxx
src/Utils/Utils_SALOME_Exception.cxx
src/Utils/Utils_SALOME_Exception.hxx

index 582cd1d7a3a9b666f920ca72e3ea08cf956682f0..4aff5403f77268da4f659606e4af684752042496 100644 (file)
@@ -1900,54 +1900,18 @@ void Engines_Container_i::clearTemporaryFiles()
   _tmp_files.clear();
 }
 
-/*
-std::string Engines_Container_i::AnotherMethodeToReplace_PyString_AsString(PyObject * result)
-{
-    std::string my_result = "";
-    if (PyUnicode_Check(result)) {
-        // Convert string to bytes.
-        // strdup() bytes into my_result.
-        PyObject * temp_bytes = PyUnicode_AsEncodedString(result, "ASCII", "strict"); // Owned reference
-        if (temp_bytes != NULL) {
-            my_result = PyBytes_AS_STRING(temp_bytes); // Borrowed pointer
-            my_result = strdup(my_result);
-            Py_DECREF(temp_bytes);
-        } else {
-            // TODO PY3: Handle encoding error.
-            Py_DECREF(temp_bytes);
-        }
+static Engines_Container_i *_container_singleton_ssl = nullptr;
 
-    } else if (PyBytes_Check(result)) {
-        // strdup() bytes into my_result.
-        my_result = PyBytes_AS_STRING(result); // Borrowed pointer
-        my_result = strdup(my_result);
-    } else {
-        // Convert into your favorite string representation.
-        // Convert string to bytes if it is not already.
-        // strdup() bytes into my_result.
-        // TODO PY3: Check if only bytes is ok. 
-        PyObject * temp_bytes = PyObject_Bytes(result); // Owned reference
-        if (temp_bytes != NULL) {
-            my_result = PyBytes_AS_STRING(temp_bytes); // Borrowed pointer
-            my_result = strdup(my_result);
-            Py_DECREF(temp_bytes);
-        } else {
-            // TODO PY3: Handle error.
-            Py_DECREF(temp_bytes);
-        }
-    }
-    return my_result;
-}
-*/
+static PortableServer::ObjectId_var _container_id_singleton_ssl;
 
-static Engines_Container_i *_container_singleton_ssl = nullptr;
+static Engines::Container_var _container_ref_singleton_ssl;
 
-Engines_Container_i *KERNEL::getContainerIdSA()
+Engines_Container_i *KERNEL::getContainerSA()
 {
-
   if(!_container_singleton_ssl)
   {
-    int argc(0); orb = CORBA::ORB_init(argc,nullptr); }
+    int argc(0);
+    CORBA::ORB_var orb = CORBA::ORB_init(argc,nullptr);
     CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
     PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
     PortableServer::POAManager_var pman = poa->the_POAManager();
@@ -1955,13 +1919,29 @@ Engines_Container_i *KERNEL::getContainerIdSA()
     policies.length(0);
     PortableServer::ObjectId_var conId;
     //
-    {
-        char *argv[4] = {"Container","FactoryServer","toto",nullptr};
-        _container_singleton_ssl = new Engines_Container_i(orb,poa,"FactoryServer",2,argv,false,false);
-        conId = poa->activate_object(_container_singleton_ssl);
-    }
+    char *argv[4] = {"Container","FactoryServer","toto",nullptr};
+    _container_singleton_ssl = new Engines_Container_i(orb,poa,"FactoryServer",2,argv,false,false);
+    _container_id_singleton_ssl = poa->activate_object(_container_singleton_ssl);
+    //
+    CORBA::Object_var zeRef = poa->id_to_reference(_container_id_singleton_ssl);
+    _container_ref_singleton_ssl = Engines::Container::_narrow(zeRef);
   }
-CORBA::ORB_var orb;
+  return _container_singleton_ssl;
+}
+
+PortableServer::ObjectId_var KERNEL::getContainerIdSA()
+{
+  getContainerSA();
+  return _container_id_singleton_ssl;
+}
+
+Engines::Container_var KERNEL::getContainerRefSA()
+{
+  getContainerSA();
+  return _container_ref_singleton_ssl;
+}
+
+/*CORBA::ORB_var orb;
     { int argc(0); orb = CORBA::ORB_init(argc,nullptr); }
     CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
     PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
@@ -1997,4 +1977,4 @@ PortableServer::ObjectId_var KERNEL::getContainerIdSA()
 Engines::Container_var KERNEL::getContainerRefSA()
 {
 
-}
+}*/
index 047d9dfb3366965251dcf1afcf500a82ab65b2ca..42564975be9f172b96d2d4081787cccec65431f7 100644 (file)
@@ -178,7 +178,7 @@ protected:
  */
 namespace KERNEL
 {
-  CONTAINER_EXPORT Engines_Container_i *getContainerIdSA();
+  CONTAINER_EXPORT Engines_Container_i *getContainerSA();
   CONTAINER_EXPORT PortableServer::ObjectId_var getContainerIdSA();
   CONTAINER_EXPORT Engines::Container_var getContainerRefSA();
 }
index b9c498c0338ce36d323293a2a227d22d45a88ec1..b44f5c8427a59218e280170a84afe16afd7bdaee 100644 (file)
@@ -81,7 +81,7 @@ public:
     return oss_.str();
   }
 
-  // Surtout ne pas écrire le code suivant:
+  // Surtout ne pas crire le code suivant:
   // car oss_.str() renvoie une string temporaire
   //   operator const char*()
   //   {
@@ -91,32 +91,25 @@ public:
 }; /* end class OSS */
 #endif
 
-
-// Cette fonction provient de Utils_SALOME_Exception
-// Solution pas très élégante mais contrainte par les manques de la classe SALOME_Exception
-const char *makeText( const char *text, const char *fileName, const unsigned int lineNumber);
-
 struct DSC_Exception : public SALOME_Exception {
 
-  // Attention, en cas de modification des paramètres par défaut
+  // Attention, en cas de modification des param�tres par d�faut
   // il est necessaire de les repporter dans la macro DSC_EXCEPTION ci-dessous
   // Le constructeur de la SALOME_Exception demande une chaine non vide
-  // Du coup on est obliger de la désallouer avant d'y mettre la notre
+  // Du coup on est obliger de la dsallouer avant d'y mettre la notre
   // car le what n'est pas virtuel donc il faut que le contenu de SALOME_Exception::_text
   // soit utilisable.
-  // Ne pas mettre lineNumber=0 à cause du calcul log dans la SALOME_Exception si fileName est défini
+  // Ne pas mettre lineNumber=0 � cause du calcul log dans la SALOME_Exception si fileName est d�fini
   DSC_Exception( const std::string & text, 
                  const char *fileName="", 
                  const unsigned int lineNumber=0, 
                  const char *funcName="" ):
-    SALOME_Exception(text.c_str()) ,
+    SALOME_Exception(text) ,
     _dscText(text),
     _filefuncName(setFileFuncName(fileName?fileName:"",funcName?funcName:"")),
     _lineNumber(lineNumber),
     _exceptionName("DSC_Exception")
   {
-    // Mise en cohérence avec l'exception SALOME (à revoir)
-    delete [] ((char*)SALOME_Exception::_text);
     if (! _filefuncName.empty() )
       SALOME_Exception::_text = makeText(text.c_str(),_filefuncName.c_str(),lineNumber) ;
     else
@@ -135,10 +128,10 @@ struct DSC_Exception : public SALOME_Exception {
     return _what.c_str()  ;
   }
 
-  // L'opérateur = de SALOME_Exception n'est pas défini
-  // problème potentiel concernant la recopie de son pointeur _text
+  // L'op�rateur = de SALOME_Exception n'est pas d�fini
+  // problme potentiel concernant la recopie de son pointeur _text
     
-  // Le destructeur de la SALOME_Exception devrait être virtuel
+  // Le destructeur de la SALOME_Exception devrait tre virtuel
   // sinon pb avec nos attributs de type pointeur.
   virtual ~DSC_Exception(void) noexcept {};
 
@@ -173,8 +166,8 @@ protected:
     virtual ~Derived(void) noexcept;\
 };\
 
-//Sert à eviter le problème d'identification RTTI des exceptions
-//Crée un unique typeInfo pour tous les bibliothèques composants SALOME
+//Sert � eviter le probl�me d'identification RTTI des exceptions
+//Cr�e un unique typeInfo pour tous les biblioth�ques composants SALOME
 //dans un fichier cxx
 #define DSC_EXCEPTION_CXX(NameSpace,Derived) NameSpace::Derived::~Derived(void) noexcept {}
 
index 75c7e911bee573d3fcde6dbd1c45722f5c92d843..026c224930d8a0bf1cb4eb2d49cedfd849725ec5 100644 (file)
@@ -18,6 +18,7 @@
 //
 
 #include "SALOME_Fake_NamingService.hxx"
+#include "Utils_SALOME_Exception.hxx"
 
 SALOME_Fake_NamingService::SALOME_Fake_NamingService(CORBA::ORB_ptr orb):_orb(CORBA::ORB::_duplicate(orb))
 {
@@ -33,5 +34,8 @@ void SALOME_Fake_NamingService::Register(CORBA::Object_ptr ObjRef, const char* P
 CORBA::Object_ptr SALOME_Fake_NamingService::Resolve(const char* Path)
 {
   std::string pathCpp(Path);
-  if(pathCpp == )
+  auto it = _map.find(pathCpp);
+  if( it != _map.end() )
+    return (*it).second;
+  THROW_SALOME_EXCEPTION("SALOME_Fake_NamingService::Resolve : no such entry \"" << Path << "\" !");
 }
index 7747f5ce4de643d6ba60a612caac96162b54a398..dbdcf4f1054d731e1ddd55f1645e7e12e982284f 100644 (file)
 # include <iostream>
 # include "utilities.h"
 # include "Utils_Identity.hxx"
+# include <cstring>
 
 extern "C"
 {
-# include <string.h>
-
 #ifndef WIN32 /* unix functionality */
 # include <pwd.h>
 #endif
index 999afd652cf499d331698b8b93b48b12bfbdf828..99dcb283a37dbbc130448a50e7a549fc67d84be1 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SALOME
 //  $Header$
 //
-#include <iostream>
 #include "Utils_SALOME_Exception.hxx"
 #include "utilities.h"
 
@@ -41,82 +40,36 @@ extern "C"
 }
 #endif
 
-
-const char* duplicate( const char *const str ) ;
-
-SALOME_Exception::SALOME_Exception( void ): exception() , _text(0)
+std::string makeText(const char *text, const char *fileName, const unsigned int lineNumber)
 {
-        MESSAGE( "You must use the standard builder: SALOME_Exception::SALOME_Exception( const char *text )" ) ;
-        INTERRUPTION(1) ;
+  constexpr char prefix[] = "Salome Exception";
+  std::ostringstream oss;
+  if (fileName)
+  {
+    oss << prefix << " in " << fileName << "[" << lineNumber << "] : " << text;
+  }
+  else
+  {
+    oss << prefix << " : " << text;
+  }
+  return oss.str();
 }
 
-
-
-const char *makeText( const char *text, const char *fileName, const unsigned int lineNumber )
+SALOME_Exception::SALOME_Exception(const char *text, const char *fileName, const unsigned int lineNumber) : _text(makeText(text, fileName, lineNumber))
 {
-        char *newText = 0 ;
-
-        ASSERT(text) ;
-        const size_t l1 = 1+strlen(text) ;
-        ASSERT(l1>1) ;
-
-        const char* prefix = "Salome Exception" ;
-        const size_t l0 = 2+strlen(prefix) ;
-
-        if ( fileName )
-        {
-                const size_t l2 = 4+strlen(fileName) ;
-                ASSERT(l2>4) ;
-
-                ASSERT(lineNumber>=1) ;
-                const size_t l3 = 4+int(log10(float(lineNumber))) ;
-                
-                newText = new char [ 1+l0+l1+l2+l3 ] ;
-                sprintf( newText , "%s in %s [%u] : %s" , prefix, fileName, lineNumber, text ) ;
-        }
-        else
-        {
-                newText = new char [ 1+l0+l1 ] ;
-                sprintf( newText , "%s : %s" , prefix, text ) ;
-        }
-        ASSERT(newText) ;
-        return newText ;
 }
 
-
-SALOME_Exception::SALOME_Exception( const char *text, const char *fileName, const unsigned int lineNumber ) : exception(), _text( makeText( text , fileName , lineNumber ) )
-{
-}
-
-
 SALOME_Exception::~SALOME_Exception() noexcept
 {
-        if ( _text )
-        {
-                delete [] ((char*)_text);
-                char** pRef = (char**)&_text;
-                *pRef = 0;
-        }
-        ASSERT(_text==NULL) ;
-}
-
-
-
-SALOME_Exception::SALOME_Exception( const SALOME_Exception &ex ): _text(duplicate(ex._text))
-{
-        ;
 }
 
-
-std::ostream & operator<<( std::ostream &os , const SALOME_Exception &ex )
+std::ostream &operator<<(std::ostream &os, const SALOME_Exception &ex)
 {
-        os << ex._text ;
-        return os ;
+  os << ex._text;
+  return os;
 }
 
-
-
-const char* SALOME_Exception::what( void ) const noexcept
+const char *SALOME_Exception::what(void) const noexcept
 {
-        return _text ;
+  return _text.c_str();
 }
index d4d94d5681eadd7118d1c2bd20bdc2e44bc6fd6f..6c69e83bf75bade5f653f8f9c66d2c3d62bf0598 100644 (file)
 //  Module : SALOME
 //  $Header$
 //
-#if !defined( __Utils_SALOME_Exception_hxx__ )
-#define __Utils_SALOME_Exception_hxx__
+#pragma once
 
-//#include "SALOME_Utils.hxx"
-
-# include <exception>
-# include <iostream>
+#include <exception>
+#include <sstream>
+#include <string>
 
 #ifdef LOCALIZED
 #undef LOCALIZED
 #endif
 #if defined(_DEBUG_) || defined(_DEBUG)
-# define LOCALIZED(message) #message , __FILE__ , __LINE__
+#define LOCALIZED(message) #message, __FILE__, __LINE__
 #else
-# define LOCALIZED(message) #message
+#define LOCALIZED(message) #message
 #endif
 
 //swig tool on Linux doesn't pass defines from header SALOME_Utils.hxx
 //therefore (temporary solution) defines are placed below
 
 #ifdef WIN32
-# if defined UTILS_EXPORTS || defined OpUtil_EXPORTS
-#  define UTILS_EXPORT __declspec( dllexport )
-# else
-#  define UTILS_EXPORT __declspec( dllimport )
-#  undef LOCALIZED
-#  define LOCALIZED(message) #message
-# endif
+#if defined UTILS_EXPORTS || defined OpUtil_EXPORTS
+#define UTILS_EXPORT __declspec(dllexport)
+#else
+#define UTILS_EXPORT __declspec(dllimport)
+#undef LOCALIZED
+#define LOCALIZED(message) #message
+#endif
 #else
-# define UTILS_EXPORT
+#define UTILS_EXPORT
 #endif
 
 class SALOME_Exception;
 
-UTILS_EXPORT std::ostream& operator<<( std::ostream&, const SALOME_Exception& );
+UTILS_EXPORT std::ostream &operator<<(std::ostream &, const SALOME_Exception &);
 
-UTILS_EXPORT const char *makeText( const char *text, const char *fileName, const unsigned int lineNumber );
+UTILS_EXPORT std::string makeText(const char *text, const char *fileName, const unsigned int lineNumber);
 
 class UTILS_EXPORT SALOME_Exception : public std::exception
 {
+protected:
+  std::string _text;
+public:
+  SALOME_Exception() = delete;
+  SALOME_Exception(const std::string& text):_text(text) { }
+  SALOME_Exception(const char *text, const char *fileName = nullptr, const unsigned int lineNumber = 0);
+  virtual ~SALOME_Exception() noexcept;
+  UTILS_EXPORT friend std::ostream &operator<<(std::ostream &os, const SALOME_Exception &ex);
+  virtual const char *what(void) const noexcept;
+};
 
-private :
-        SALOME_Exception( void );
-
-protected :
-        const char* _text ;     // non constant pointer but read only char variable
-
-public :
-        SALOME_Exception( const char *text, const char *fileName=0, const unsigned int lineNumber=0 );
-        SALOME_Exception( const SALOME_Exception &ex );
-        virtual ~SALOME_Exception() noexcept;
-        UTILS_EXPORT friend std::ostream & operator<<( std::ostream &os , const SALOME_Exception &ex );
-        virtual const char *what( void ) const noexcept;
-} ;
-
-
-#endif          /* #if !defined( __Utils_SALOME_Exception_hxx__ ) */
+#define THROW_SALOME_EXCEPTION(text)      \
+{                                         \
+    std::ostringstream oss; oss << text;  \
+    throw SALOME_Exception(oss.str());    \
+}