SALOME_ContainerScriptExecPerfLog *servC = dynamic_cast<SALOME_ContainerScriptExecPerfLog *>(serv);
visitor.visitContainerScriptExecPerfLog( *servC );
}
- visitor.enterContainerScriptPerfLog( *this );
+ visitor.leaveContainerScriptPerfLog( *this );
}
Engines::ContainerScriptExecPerfLog_ptr SALOME_ContainerScriptPerfLog::addExecutionSession()
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);
}
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;
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)
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;
}