Salome HOME
[EDF29150] : End of save / load of LogManager + non regression test.
[modules/kernel.git] / src / Launcher / SALOME_LogManager.cxx
index baaa30783f0b4e652ed752f4eeecea332c663504..b477724768b217c6ba041fb49de2ec05f008a031 100644 (file)
@@ -138,7 +138,7 @@ void SALOME_ContainerScriptPerfLog::accept(SALOME_VisitorContainerLog &visitor)
     SALOME_ContainerScriptExecPerfLog *servC = dynamic_cast<SALOME_ContainerScriptExecPerfLog *>(serv);
     visitor.visitContainerScriptExecPerfLog( *servC );
   }
-  visitor.enterContainerScriptPerfLog( *this );
+  visitor.leaveContainerScriptPerfLog( *this );
 }
 
 Engines::ContainerScriptExecPerfLog_ptr SALOME_ContainerScriptPerfLog::addExecutionSession()
@@ -304,9 +304,12 @@ void SALOME_LogManager::accept(SALOME_VisitorContainerLog &visitor)
   visitor.leaveLogManager( *this );
 }
 
-SALOME::vectorOfByte *SALOME_LogManager::getAllStruct()
+/*!
+  \param [in] unloadMemory - specify if big part of struct data (SALOME_ContainerScriptExecPerfLog) is cleared after retrieving data
+ */
+SALOME::vectorOfByte *SALOME_LogManager::getAllStruct(bool clearMemory)
 {
-  std::vector<char> data = this->dumpCppInternalFrmt();
+  std::vector<char> data = this->dumpCppInternalFrmt(clearMemory);
   return FromVectCharToCorba(data);
 }
 
@@ -331,7 +334,7 @@ static void PushStringInVC(const T& str, std::vector<char>& data)
 class InternalFormatVisitorDump : public SALOME_VisitorContainerLog
 {
 public:
-  InternalFormatVisitorDump(std::vector<char> *data):_data(data) { }
+  InternalFormatVisitorDump(bool clearMemory, std::vector<char> *data):_clear_memory(clearMemory),_data(data) { }
   void enterLogManager(SALOME_LogManager& inst) override;
   void leaveLogManager(SALOME_LogManager& inst) override { }
   void enterContainerPerfLog(SALOME_ContainerPerfLog& inst) override;
@@ -340,12 +343,15 @@ public:
   void leaveContainerScriptPerfLog(SALOME_ContainerScriptPerfLog& inst) override { }
   void visitContainerScriptExecPerfLog(SALOME_ContainerScriptExecPerfLog& inst) override;
 private:
+  bool _clear_memory = false;
   std::vector<char> *_data = nullptr;
 };
 
 void InternalFormatVisitorDump::visitContainerScriptExecPerfLog(SALOME_ContainerScriptExecPerfLog& inst)
 {
   PushStringInVC<std::vector<char>>(inst.data(),*_data);
+  if( _clear_memory )
+    inst.clear();
 }
 
 void InternalFormatVisitorDump::enterContainerScriptPerfLog(SALOME_ContainerScriptPerfLog& inst)
@@ -367,61 +373,10 @@ void InternalFormatVisitorDump::enterLogManager(SALOME_LogManager& inst)
   PushIntInVC((std::uint32_t)inst.getNumberOfContainers(),*_data);
 }
 
-///////////////////////
-
-std::vector<char> FetchVCFromVC(std::vector<char>& data, std::size_t& offset)
-{
-  std::uint32_t *sz = reinterpret_cast<std::uint32_t *>( data.data()+offset);
-  std::vector<char> ret(data.data()+offset+sizeof(std::uint32_t),data.data()+offset+sizeof(std::uint32_t)+*sz);
-  offset += sizeof(std::uint32_t)+*sz;
-  return ret;
-}
-
-std::string FetchStringFromVC(std::vector<char>& data, std::size_t& offset)
-{
-  std::uint32_t *sz = reinterpret_cast<std::uint32_t *>( data.data() );
-  std::string ret(data.data()+sizeof(std::uint32_t),*sz);
-  offset += sizeof(std::uint32_t)+*sz;
-  return ret;
-}
-
-class InternalFormatVisitorLoad : public SALOME_VisitorContainerLog
-{
-public:
-  InternalFormatVisitorLoad(std::vector<char> *data):_data(data) { }
-  void enterContainerPerfLog(SALOME_ContainerPerfLog& inst) override;
-  void leaveContainerPerfLog(SALOME_ContainerPerfLog& inst) override { }
-  void enterContainerScriptPerfLog(SALOME_ContainerScriptPerfLog& inst) override;
-  void leaveContainerScriptPerfLog(SALOME_ContainerScriptPerfLog& inst) override { }
-  void visitContainerScriptExecPerfLog(SALOME_ContainerScriptExecPerfLog& inst) override;
-private:
-  std::vector<char> *_data = nullptr;
-  std::size_t _offset = 0;
-};
-
-void InternalFormatVisitorLoad::visitContainerScriptExecPerfLog(SALOME_ContainerScriptExecPerfLog& inst)
-{
-  inst.setData( FetchVCFromVC( *_data, _offset ) );
-}
-
-void InternalFormatVisitorLoad::enterContainerScriptPerfLog(SALOME_ContainerScriptPerfLog& inst)
-{
-  inst.setName( FetchStringFromVC(*_data, _offset) );
-  inst.setCode( FetchStringFromVC(*_data, _offset) );
-}
-
-void InternalFormatVisitorLoad::enterContainerPerfLog(SALOME_ContainerPerfLog& inst)
-{
-  inst.setNameInNS( FetchStringFromVC(*_data, _offset) );
-  inst.setLogFile( FetchStringFromVC(*_data, _offset) );
-}
-
-///////////////////////
-
-std::vector<char> SALOME_LogManager::dumpCppInternalFrmt()
+std::vector<char> SALOME_LogManager::dumpCppInternalFrmt(bool clearMemory)
 {
   std::vector<char> ret;
-  InternalFormatVisitorDump visitor(&ret);
+  InternalFormatVisitorDump visitor(clearMemory,&ret);
   this->accept( visitor );
   return ret;
 }