mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Removal of new/delete from RiaApplication
This commit is contained in:
parent
69c21df6a3
commit
49ffe9b53a
@ -178,9 +178,6 @@ RiaApplication::RiaApplication()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaApplication::~RiaApplication()
|
||||
{
|
||||
delete m_preferences;
|
||||
delete m_project;
|
||||
|
||||
RiaFontCache::clear();
|
||||
}
|
||||
|
||||
@ -323,7 +320,7 @@ int RiaApplication::currentScriptCaseId() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimProject* RiaApplication::project()
|
||||
{
|
||||
return m_project;
|
||||
return m_project.get();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -373,7 +370,7 @@ bool RiaApplication::openFile( const QString& fileName )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RiaApplication::isProjectSavedToDisc() const
|
||||
{
|
||||
if ( m_project.isNull() ) return false;
|
||||
if ( !m_project ) return false;
|
||||
|
||||
return caf::Utils::fileExists( m_project->fileName() );
|
||||
}
|
||||
@ -455,7 +452,7 @@ bool RiaApplication::loadProject( const QString& projectFileName,
|
||||
// Apply any modifications to the loaded project before we go ahead and load actual data
|
||||
if ( projectModifier )
|
||||
{
|
||||
projectModifier->applyModificationsToProject( m_project );
|
||||
projectModifier->applyModificationsToProject( m_project.get() );
|
||||
}
|
||||
|
||||
// Propagate possible new location of project
|
||||
@ -474,8 +471,7 @@ bool RiaApplication::loadProject( const QString& projectFileName,
|
||||
onProjectOpeningError( errMsg );
|
||||
|
||||
// Delete all object possibly generated by readFile()
|
||||
delete m_project;
|
||||
m_project = new RimProject;
|
||||
m_project = std::make_unique<RimProject>();
|
||||
|
||||
onProjectOpened();
|
||||
|
||||
@ -522,7 +518,7 @@ bool RiaApplication::loadProject( const QString& projectFileName,
|
||||
if ( oilField == nullptr ) continue;
|
||||
if ( oilField->wellPathCollection == nullptr )
|
||||
{
|
||||
oilField->wellPathCollection = new RimWellPathCollection();
|
||||
oilField->wellPathCollection = std::make_unique<RimWellPathCollection>();
|
||||
}
|
||||
|
||||
oilField->wellPathCollection->loadDataAndUpdate();
|
||||
@ -541,13 +537,13 @@ bool RiaApplication::loadProject( const QString& projectFileName,
|
||||
// Temporary
|
||||
if ( !oilField->summaryCaseMainCollection() )
|
||||
{
|
||||
oilField->summaryCaseMainCollection = new RimSummaryCaseMainCollection();
|
||||
oilField->summaryCaseMainCollection = std::make_unique<RimSummaryCaseMainCollection>();
|
||||
}
|
||||
oilField->summaryCaseMainCollection()->loadAllSummaryCaseData();
|
||||
|
||||
if ( !oilField->observedDataCollection() )
|
||||
{
|
||||
oilField->observedDataCollection = new RimObservedDataCollection();
|
||||
oilField->observedDataCollection = std::make_unique<RimObservedDataCollection>();
|
||||
}
|
||||
for ( RimObservedSummaryData* observedData : oilField->observedDataCollection()->allObservedSummaryData() )
|
||||
{
|
||||
@ -720,7 +716,7 @@ bool RiaApplication::loadProject( const QString& projectFileName )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RiaApplication::saveProject( gsl::not_null<QString*> errorMessage )
|
||||
{
|
||||
CAF_ASSERT( m_project.notNull() );
|
||||
CAF_ASSERT( m_project );
|
||||
|
||||
if ( !isProjectSavedToDisc() )
|
||||
{
|
||||
@ -738,7 +734,7 @@ bool RiaApplication::saveProject( gsl::not_null<QString*> errorMessage )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RiaApplication::saveProjectAs( const QString& fileName, gsl::not_null<QString*> errorMessage )
|
||||
{
|
||||
CAF_ASSERT( m_project.notNull() );
|
||||
CAF_ASSERT( m_project );
|
||||
// Make sure we always store path with forward slash to avoid issues when opening the project file on Linux
|
||||
m_project->fileName = RiaFilePathTools::toInternalSeparator( fileName );
|
||||
|
||||
@ -850,15 +846,16 @@ bool RiaApplication::openOdbCaseFromFile( const QString& fileName, bool applyTim
|
||||
QFileInfo gridFileName( fileName );
|
||||
QString caseName = gridFileName.completeBaseName();
|
||||
|
||||
RimGeoMechModels* geoMechModelCollection = m_project->activeOilField() ? m_project->activeOilField()->geoMechModels()
|
||||
: nullptr;
|
||||
if ( !m_project->activeOilField() ) return false;
|
||||
|
||||
// Create the geoMech model container if it is not there already
|
||||
if ( geoMechModelCollection == nullptr )
|
||||
if ( !m_project->activeOilField()->geoMechModels )
|
||||
{
|
||||
geoMechModelCollection = new RimGeoMechModels();
|
||||
m_project->activeOilField()->geoMechModels = geoMechModelCollection;
|
||||
m_project->activeOilField()->geoMechModels = std::make_unique<RimGeoMechModels>();
|
||||
}
|
||||
|
||||
gsl::not_null<RimGeoMechModels*> geoMechModelCollection = m_project->activeOilField()->geoMechModels();
|
||||
|
||||
// Check if the file is already open, the odb reader does not support opening the same file twice very well
|
||||
for ( auto gmcase : geoMechModelCollection->cases() )
|
||||
{
|
||||
@ -869,11 +866,11 @@ bool RiaApplication::openOdbCaseFromFile( const QString& fileName, bool applyTim
|
||||
}
|
||||
}
|
||||
|
||||
RimGeoMechCase* geoMechCase = new RimGeoMechCase();
|
||||
auto geoMechCase = std::make_unique<RimGeoMechCase>();
|
||||
geoMechCase->setGridFileName( fileName );
|
||||
geoMechCase->caseUserDescription = caseName;
|
||||
geoMechCase->setApplyTimeFilter( applyTimeStepFilter );
|
||||
m_project->assignCaseIdToCase( geoMechCase );
|
||||
m_project->assignCaseIdToCase( geoMechCase.get() );
|
||||
|
||||
RimGeoMechView* riv = geoMechCase->createAndAddReservoirView();
|
||||
caf::ProgressInfo progress( 11, "Loading Case" );
|
||||
@ -883,10 +880,9 @@ bool RiaApplication::openOdbCaseFromFile( const QString& fileName, bool applyTim
|
||||
|
||||
if ( !riv->geoMechCase() )
|
||||
{
|
||||
delete geoMechCase;
|
||||
return false;
|
||||
}
|
||||
geoMechModelCollection->addCase( geoMechCase );
|
||||
geoMechModelCollection->addCase( geoMechCase.release() );
|
||||
|
||||
progress.incrementProgress();
|
||||
progress.setProgressDescription( "Loading results information" );
|
||||
@ -912,7 +908,7 @@ std::vector<RimWellPath*> RiaApplication::addWellPathsToModel( QList<QString>
|
||||
if ( oilField->wellPathCollection == nullptr )
|
||||
{
|
||||
// printf("Create well path collection.\n");
|
||||
oilField->wellPathCollection = new RimWellPathCollection();
|
||||
oilField->wellPathCollection = std::make_unique<RimWellPathCollection>();
|
||||
|
||||
m_project->updateConnectedEditors();
|
||||
}
|
||||
@ -940,7 +936,7 @@ void RiaApplication::addWellPathFormationsToModel( QList<QString> wellPathFormat
|
||||
|
||||
if ( oilField->wellPathCollection == nullptr )
|
||||
{
|
||||
oilField->wellPathCollection = new RimWellPathCollection();
|
||||
oilField->wellPathCollection = std::make_unique<RimWellPathCollection>();
|
||||
|
||||
m_project->updateConnectedEditors();
|
||||
}
|
||||
@ -964,9 +960,9 @@ std::vector<RimWellLogFile*> RiaApplication::addWellLogsToModel( const QList<QSt
|
||||
RimOilField* oilField = m_project->activeOilField();
|
||||
if ( oilField == nullptr ) return {};
|
||||
|
||||
if ( oilField->wellPathCollection == nullptr )
|
||||
if ( !oilField->wellPathCollection )
|
||||
{
|
||||
oilField->wellPathCollection = new RimWellPathCollection();
|
||||
oilField->wellPathCollection = std::make_unique<RimWellPathCollection>();
|
||||
|
||||
m_project->updateConnectedEditors();
|
||||
}
|
||||
@ -1125,15 +1121,15 @@ bool RiaApplication::launchProcess( const QString& program,
|
||||
}
|
||||
|
||||
m_runningWorkerProcess = true;
|
||||
m_workerProcess = new caf::UiProcess( QCoreApplication::instance() );
|
||||
m_workerProcess = std::make_unique<caf::UiProcess>( QCoreApplication::instance() );
|
||||
|
||||
m_workerProcess->setProcessEnvironment( processEnvironment );
|
||||
|
||||
QCoreApplication::instance()->connect( m_workerProcess,
|
||||
QCoreApplication::instance()->connect( m_workerProcess.get(),
|
||||
SIGNAL( finished( int, QProcess::ExitStatus ) ),
|
||||
SLOT( slotWorkerProcessFinished( int, QProcess::ExitStatus ) ) );
|
||||
|
||||
startMonitoringWorkProgress( m_workerProcess );
|
||||
startMonitoringWorkProgress( m_workerProcess.get() );
|
||||
|
||||
m_workerProcess->start( program, arguments );
|
||||
|
||||
@ -1211,7 +1207,7 @@ void RiaApplication::waitForProcess() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaPreferences* RiaApplication::preferences()
|
||||
{
|
||||
return m_preferences;
|
||||
return m_preferences.get();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -1531,7 +1527,7 @@ bool RiaApplication::initializeGrpcServer( const cvf::ProgramOptions& progOpt )
|
||||
{
|
||||
portNumber = RiaGrpcServer::findAvailablePortNumber( defaultPortNumber );
|
||||
}
|
||||
m_grpcServer.reset( new RiaGrpcServer( portNumber ) );
|
||||
m_grpcServer = std::make_unique<RiaGrpcServer>( portNumber );
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
@ -1543,13 +1539,13 @@ bool RiaApplication::initializeGrpcServer( const cvf::ProgramOptions& progOpt )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaApplication::initialize()
|
||||
{
|
||||
m_preferences = new RiaPreferences;
|
||||
caf::PdmSettings::readFieldsFromApplicationStore( m_preferences );
|
||||
m_preferences = std::make_unique<RiaPreferences>();
|
||||
caf::PdmSettings::readFieldsFromApplicationStore( m_preferences.get() );
|
||||
m_preferences->initAfterReadRecursively();
|
||||
applyPreferences();
|
||||
|
||||
// Start with a project
|
||||
m_project = new RimProject;
|
||||
m_project = std::make_unique<RimProject>();
|
||||
m_project->setScriptDirectories( m_preferences->scriptDirectories() );
|
||||
m_project->setPlotTemplateFolders( m_preferences->plotTemplateFolders() );
|
||||
}
|
||||
@ -1767,17 +1763,8 @@ void RiaApplication::loadAndUpdatePlotData()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaApplication::resetProject()
|
||||
{
|
||||
if ( m_project.notNull() )
|
||||
{
|
||||
delete m_project.p();
|
||||
m_project = nullptr;
|
||||
}
|
||||
|
||||
if ( m_preferences )
|
||||
{
|
||||
delete m_preferences;
|
||||
m_preferences = nullptr;
|
||||
}
|
||||
m_project.reset();
|
||||
m_preferences.reset();
|
||||
|
||||
initialize();
|
||||
}
|
||||
|
@ -30,8 +30,8 @@
|
||||
#include "cvfFont.h"
|
||||
#include "cvfObject.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QMutex>
|
||||
#include <QPointer>
|
||||
#include <QProcess>
|
||||
#include <QProcessEnvironment>
|
||||
#include <QString>
|
||||
@ -241,21 +241,21 @@ protected:
|
||||
cvf::ref<cvf::Font> m_defaultWellLabelFont;
|
||||
|
||||
caf::PdmPointer<Rim3dView> m_activeReservoirView;
|
||||
caf::PdmPointer<RimProject> m_project;
|
||||
std::unique_ptr<RimProject> m_project;
|
||||
|
||||
RiaSocketServer* m_socketServer;
|
||||
caf::UiProcess* m_workerProcess;
|
||||
QPointer<RiaSocketServer> m_socketServer;
|
||||
std::unique_ptr<caf::UiProcess> m_workerProcess;
|
||||
|
||||
#ifdef ENABLE_GRPC
|
||||
std::unique_ptr<RiaGrpcServer> m_grpcServer;
|
||||
#endif
|
||||
|
||||
// Execute for all settings
|
||||
std::list<int> m_scriptCaseIds;
|
||||
int m_currentScriptCaseId;
|
||||
QString m_currentProgram;
|
||||
QStringList m_currentArguments;
|
||||
RiaPreferences* m_preferences;
|
||||
std::list<int> m_scriptCaseIds;
|
||||
int m_currentScriptCaseId;
|
||||
QString m_currentProgram;
|
||||
QStringList m_currentArguments;
|
||||
std::unique_ptr<RiaPreferences> m_preferences;
|
||||
|
||||
std::map<QString, QString> m_fileDialogDefaultDirectories;
|
||||
QString m_startupDefaultDirectory;
|
||||
|
@ -59,7 +59,6 @@ RiaConsoleApplication::RiaConsoleApplication( int& argc, char** argv )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaConsoleApplication::~RiaConsoleApplication()
|
||||
{
|
||||
RiaLogging::deleteLoggerInstance();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -103,7 +102,7 @@ void RiaConsoleApplication::initialize()
|
||||
|
||||
RiaApplication::initialize();
|
||||
|
||||
RiaLogging::setLoggerInstance( new RiaStdOutLogger );
|
||||
RiaLogging::setLoggerInstance( std::make_unique<RiaStdOutLogger>() );
|
||||
RiaLogging::loggerInstance()->setLevel( int( RILogLevel::RI_LL_DEBUG ) );
|
||||
|
||||
m_socketServer = new RiaSocketServer( this );
|
||||
|
@ -189,7 +189,7 @@ RiaGuiApplication::RiaGuiApplication( int& argc, char** argv )
|
||||
{
|
||||
setWindowIcon( QIcon( ":/AppLogo48x48.png" ) );
|
||||
|
||||
m_recentFileActionProvider = std::unique_ptr<RiuRecentFileActionProvider>( new RiuRecentFileActionProvider );
|
||||
m_recentFileActionProvider = std::make_unique<RiuRecentFileActionProvider>();
|
||||
|
||||
connect( this, SIGNAL( aboutToQuit() ), this, SLOT( onProgramExit() ) );
|
||||
}
|
||||
@ -201,8 +201,6 @@ RiaGuiApplication::~RiaGuiApplication()
|
||||
{
|
||||
deleteMainPlotWindow();
|
||||
deleteMainWindow();
|
||||
|
||||
RiaLogging::deleteLoggerInstance();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -210,7 +208,7 @@ RiaGuiApplication::~RiaGuiApplication()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RiaGuiApplication::saveProject()
|
||||
{
|
||||
CVF_ASSERT( m_project.notNull() );
|
||||
CVF_ASSERT( m_project );
|
||||
|
||||
QString fileName;
|
||||
if ( !isProjectSavedToDisc() )
|
||||
@ -429,10 +427,10 @@ void RiaGuiApplication::initialize()
|
||||
RiuGuiTheme::updateGuiTheme( m_preferences->guiTheme() );
|
||||
|
||||
{
|
||||
auto logger = new RiuMessagePanelLogger;
|
||||
auto logger = std::make_unique<RiuMessagePanelLogger>();
|
||||
logger->addMessagePanel( m_mainWindow->messagePanel() );
|
||||
logger->addMessagePanel( m_mainPlotWindow->messagePanel() );
|
||||
RiaLogging::setLoggerInstance( logger );
|
||||
RiaLogging::setLoggerInstance( std::move( logger ) );
|
||||
RiaLogging::loggerInstance()->setLevel( int( RILogLevel::RI_LL_DEBUG ) );
|
||||
}
|
||||
m_socketServer = new RiaSocketServer( this );
|
||||
@ -498,10 +496,10 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
|
||||
// Use a logger writing to stdout instead of message panel
|
||||
// This is useful when executing regression tests on a build server, and this is the reason for creating the
|
||||
// logger when parsing the command line options
|
||||
auto stdLogger = new RiaStdOutLogger;
|
||||
auto stdLogger = std::make_unique<RiaStdOutLogger>();
|
||||
stdLogger->setLevel( int( RILogLevel::RI_LL_DEBUG ) );
|
||||
|
||||
RiaLogging::setLoggerInstance( stdLogger );
|
||||
RiaLogging::setLoggerInstance( std::move( stdLogger ) );
|
||||
|
||||
RiaRegressionTestRunner::instance()->executeRegressionTests( regressionTestPath, QStringList() );
|
||||
return ApplicationStatus::EXIT_COMPLETED;
|
||||
@ -627,7 +625,7 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
|
||||
|
||||
if ( cvf::Option o = progOpt->option( "replaceSourceCases" ) )
|
||||
{
|
||||
if ( projectModifier.isNull() ) projectModifier = new RiaProjectModifier;
|
||||
if ( projectModifier.isNull() ) projectModifier = cvf::make_ref<RiaProjectModifier>();
|
||||
|
||||
if ( o.valueCount() == 1 )
|
||||
{
|
||||
@ -658,7 +656,7 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
|
||||
|
||||
if ( cvf::Option o = progOpt->option( "replacePropertiesFolder" ) )
|
||||
{
|
||||
if ( projectModifier.isNull() ) projectModifier = new RiaProjectModifier;
|
||||
if ( projectModifier.isNull() ) projectModifier = cvf::make_ref<RiaProjectModifier>();
|
||||
|
||||
if ( o.valueCount() == 1 )
|
||||
{
|
||||
@ -1266,7 +1264,7 @@ void RiaGuiApplication::onFileSuccessfullyLoaded( const QString& fileName, RiaDe
|
||||
void RiaGuiApplication::onProjectBeingOpened()
|
||||
{
|
||||
// When importing a project, do not maximize the first MDI window to be created
|
||||
m_maximizeWindowGuard.reset( new RiuMdiMaximizeWindowGuard );
|
||||
m_maximizeWindowGuard = std::make_unique<RiuMdiMaximizeWindowGuard>();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -1614,7 +1612,7 @@ void RiaGuiApplication::updateGrpcServer()
|
||||
else if ( !isGrpcRunning && shouldItBeRunning )
|
||||
{
|
||||
int portNumber = RiaGrpcServer::findAvailablePortNumber( m_preferences->defaultGrpcPortNumber() );
|
||||
m_grpcServer.reset( new RiaGrpcServer( portNumber ) );
|
||||
m_grpcServer = std::make_unique<RiaGrpcServer>( portNumber );
|
||||
m_grpcServer->runInThread();
|
||||
}
|
||||
#endif
|
||||
|
@ -169,37 +169,22 @@ void RiaDefaultConsoleLogger::writeToConsole( const std::string& str )
|
||||
//
|
||||
//==================================================================================================
|
||||
|
||||
RiaLogger* RiaLogging::sm_logger = new RiaDefaultConsoleLogger;
|
||||
std::unique_ptr<RiaLogger> RiaLogging::sm_logger = std::make_unique<RiaDefaultConsoleLogger>();
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaLogger* RiaLogging::loggerInstance()
|
||||
{
|
||||
return sm_logger;
|
||||
return sm_logger.get();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaLogging::setLoggerInstance( RiaLogger* loggerInstance )
|
||||
void RiaLogging::setLoggerInstance( std::unique_ptr<RiaLogger> loggerInstance )
|
||||
{
|
||||
// Only delete if we're currently using our own default impl
|
||||
if ( dynamic_cast<RiaDefaultConsoleLogger*>( sm_logger ) )
|
||||
{
|
||||
delete sm_logger;
|
||||
}
|
||||
|
||||
sm_logger = loggerInstance;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaLogging::deleteLoggerInstance()
|
||||
{
|
||||
delete sm_logger;
|
||||
sm_logger = nullptr;
|
||||
sm_logger = std::move( loggerInstance );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class QString;
|
||||
@ -59,8 +60,7 @@ class RiaLogging
|
||||
{
|
||||
public:
|
||||
static RiaLogger* loggerInstance();
|
||||
static void setLoggerInstance( RiaLogger* loggerInstance );
|
||||
static void deleteLoggerInstance();
|
||||
static void setLoggerInstance( std::unique_ptr<RiaLogger> loggerInstance );
|
||||
|
||||
static void error( const QString& message );
|
||||
static void warning( const QString& message );
|
||||
@ -70,7 +70,7 @@ public:
|
||||
static void errorInMessageBox( QWidget* parent, const QString& title, const QString& text );
|
||||
|
||||
private:
|
||||
static RiaLogger* sm_logger;
|
||||
static std::unique_ptr<RiaLogger> sm_logger;
|
||||
};
|
||||
|
||||
//==================================================================================================
|
||||
|
@ -6,6 +6,8 @@
|
||||
#include "cafPdmFieldHandle.h"
|
||||
#include "cafPdmPointer.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace caf
|
||||
{
|
||||
template <typename T>
|
||||
@ -47,7 +49,8 @@ public:
|
||||
template <typename DataType>
|
||||
class PdmChildArrayField<DataType*> : public PdmChildArrayFieldHandle
|
||||
{
|
||||
typedef DataType* DataTypePtr;
|
||||
typedef DataType* DataTypePtr;
|
||||
typedef std::unique_ptr<DataType> DataTypeUniquePtr;
|
||||
|
||||
public:
|
||||
PdmChildArrayField() {}
|
||||
@ -63,6 +66,7 @@ public:
|
||||
void clear() override;
|
||||
void deleteAllChildObjects() override;
|
||||
void insertAt( int indexAfter, PdmObjectHandle* obj ) override;
|
||||
void insertAt( int indexAfter, std::unique_ptr<PdmObjectHandle> obj );
|
||||
PdmObjectHandle* at( size_t index ) override;
|
||||
void setValue( const std::vector<DataType*>& objects );
|
||||
|
||||
@ -72,9 +76,12 @@ public:
|
||||
|
||||
DataType* operator[]( size_t index ) const;
|
||||
|
||||
void push_back( DataType* pointer );
|
||||
void set( size_t index, DataType* pointer );
|
||||
void insert( size_t indexAfter, DataType* pointer );
|
||||
void push_back( DataTypePtr pointer );
|
||||
void push_back( DataTypeUniquePtr pointer );
|
||||
void set( size_t index, DataTypePtr pointer );
|
||||
void set( size_t index, DataTypeUniquePtr pointer );
|
||||
void insert( size_t indexAfter, DataTypePtr pointer );
|
||||
void insert( size_t indexAfter, DataTypeUniquePtr pointer );
|
||||
void insert( size_t indexAfter, const std::vector<PdmPointer<DataType>>& objects );
|
||||
size_t count( const DataType* pointer ) const;
|
||||
|
||||
|
@ -35,7 +35,16 @@ void PdmChildArrayField<DataType*>::push_back( DataType* pointer )
|
||||
CAF_ASSERT( isInitializedByInitFieldMacro() );
|
||||
|
||||
m_pointers.push_back( pointer );
|
||||
if ( pointer ) pointer->setAsParentField( this );
|
||||
if ( m_pointers.back() ) m_pointers.back()->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
void PdmChildArrayField<DataType*>::push_back( DataTypeUniquePtr pointer )
|
||||
{
|
||||
this->push_back( pointer.release() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -49,7 +58,17 @@ void PdmChildArrayField<DataType*>::set( size_t index, DataType* pointer )
|
||||
|
||||
if ( m_pointers[index] ) m_pointers[index]->removeAsParentField( this );
|
||||
m_pointers[index] = pointer;
|
||||
if ( m_pointers[index] ) pointer->setAsParentField( this );
|
||||
if ( m_pointers[index] ) m_pointers[index]->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Set the value at position index to pointer, overwriting any pointer already present at that
|
||||
/// position without deleting the object pointed to.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
void PdmChildArrayField<DataType*>::set( size_t index, DataTypeUniquePtr pointer )
|
||||
{
|
||||
this->set( index, pointer.release() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -63,7 +82,17 @@ void PdmChildArrayField<DataType*>::insert( size_t index, DataType* pointer )
|
||||
|
||||
m_pointers.insert( m_pointers.begin() + index, pointer );
|
||||
|
||||
if ( pointer ) pointer->setAsParentField( this );
|
||||
if ( m_pointers[index] ) m_pointers[index]->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Insert pointer at position index, pushing the value previously at that position and all
|
||||
/// the preceding values backwards
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
void PdmChildArrayField<DataType*>::insert( size_t index, DataTypeUniquePtr pointer )
|
||||
{
|
||||
this->insert( index, pointer.release() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -285,6 +314,15 @@ void PdmChildArrayField<DataType*>::insertAt( int indexAfter, PdmObjectHandle* o
|
||||
obj->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
void PdmChildArrayField<DataType*>::insertAt( int indexAfter, std::unique_ptr<PdmObjectHandle> obj )
|
||||
{
|
||||
this->insertAt( indexAfter, obj.release() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -5,6 +5,8 @@
|
||||
#include "cafAssert.h"
|
||||
#include "cafPdmPointer.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace caf
|
||||
{
|
||||
template <typename T>
|
||||
@ -37,21 +39,24 @@ public:
|
||||
template <typename DataType>
|
||||
class PdmChildField<DataType*> : public PdmChildFieldHandle
|
||||
{
|
||||
typedef DataType* DataTypePtr;
|
||||
typedef DataType* DataTypePtr;
|
||||
typedef std::unique_ptr<DataType> DataTypeUniquePtr;
|
||||
|
||||
public:
|
||||
PdmChildField() {}
|
||||
explicit PdmChildField( const DataTypePtr& fieldValue );
|
||||
explicit PdmChildField( DataTypeUniquePtr fieldValue );
|
||||
virtual ~PdmChildField();
|
||||
|
||||
// Assignment
|
||||
|
||||
PdmChildField& operator=( const DataTypePtr& fieldValue );
|
||||
|
||||
PdmChildField& operator=( DataTypeUniquePtr fieldValue );
|
||||
// Basic access
|
||||
|
||||
DataType* value() const { return m_fieldValue; }
|
||||
void setValue( const DataTypePtr& fieldValue );
|
||||
void setValue( DataTypeUniquePtr fieldValue );
|
||||
|
||||
// Access operators
|
||||
|
||||
|
@ -59,6 +59,17 @@ caf::PdmChildField<DataType*>::PdmChildField( const DataTypePtr& fieldValue )
|
||||
if ( m_fieldValue != nullptr ) m_fieldValue->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
caf::PdmChildField<DataType*>::PdmChildField( DataTypeUniquePtr fieldValue )
|
||||
{
|
||||
if ( m_fieldValue ) m_fieldValue->removeAsParentField( this );
|
||||
m_fieldValue = fieldValue.release();
|
||||
if ( m_fieldValue != nullptr ) m_fieldValue->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -82,6 +93,15 @@ caf::PdmChildField<DataType*>& PdmChildField<DataType*>::operator=( const DataTy
|
||||
return *this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
caf::PdmChildField<DataType*>& PdmChildField<DataType*>::operator=( DataTypeUniquePtr fieldValue )
|
||||
{
|
||||
return this->operator=( fieldValue.release() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -93,4 +113,13 @@ void caf::PdmChildField<DataType*>::setValue( const DataTypePtr& fieldValue )
|
||||
if ( m_fieldValue != nullptr ) m_fieldValue->setAsParentField( this );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
template <typename DataType>
|
||||
void caf::PdmChildField<DataType*>::setValue( DataTypeUniquePtr fieldValue )
|
||||
{
|
||||
return this->setValue( fieldValue.release() );
|
||||
}
|
||||
|
||||
} // End of namespace caf
|
||||
|
Loading…
Reference in New Issue
Block a user