Removal of new/delete from RiaApplication

This commit is contained in:
Gaute Lindkvist 2020-10-22 13:57:48 +02:00
parent 69c21df6a3
commit 49ffe9b53a
10 changed files with 147 additions and 99 deletions

View File

@ -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();
}

View File

@ -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;

View File

@ -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 );

View File

@ -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

View File

@ -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 );
}
//--------------------------------------------------------------------------------------------------

View File

@ -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;
};
//==================================================================================================

View File

@ -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;

View File

@ -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() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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

View File

@ -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