From e2228aab8a8796d10888974d54a9e17dfae40f05 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 22 Feb 2019 11:40:58 +0100 Subject: [PATCH] ENH: avoid references to temporaries in surfaceWriter - previously wrapped raw points/faces with a meshedSurfRef on input, but now handle the raw -> meshedSurf logic directly within surfaceWriter to avoid holding references to temporaries Since the updated meshedSurfRef is now modifiable, it can be used directly as a redirection mechanism within surfaceWriter. - add explicit close() in destructor --- src/surfMesh/writers/surfaceWriter.C | 49 ++++++++++++++++++--- src/surfMesh/writers/surfaceWriter.H | 12 +++-- src/surfMesh/writers/vtk/vtkSurfaceWriter.C | 4 +- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/surfMesh/writers/surfaceWriter.C b/src/surfMesh/writers/surfaceWriter.C index dbdc60e2d0..33ddbb7fb8 100644 --- a/src/surfMesh/writers/surfaceWriter.C +++ b/src/surfMesh/writers/surfaceWriter.C @@ -135,6 +135,8 @@ Foam::surfaceWriter::New Foam::surfaceWriter::surfaceWriter() : surf_(std::cref(emptySurface_)), + surfComp_(), + useComponents_(false), upToDate_(false), parallel_(true), useTimeDir_(false), @@ -188,7 +190,9 @@ Foam::surfaceWriter::surfaceWriter // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::surfaceWriter::~surfaceWriter() -{} +{ + close(); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -305,7 +309,9 @@ void Foam::surfaceWriter::clear() { close(); expire(); + useComponents_ = false; surf_ = std::cref(emptySurface_); + surfComp_.clear(); } @@ -316,7 +322,9 @@ void Foam::surfaceWriter::setSurface ) { expire(); + useComponents_ = false; surf_ = std::cref(surf); + surfComp_.clear(); parallel_ = (parallel && Pstream::parRun()); } @@ -329,7 +337,10 @@ void Foam::surfaceWriter::setSurface ) { expire(); - setSurface(meshedSurfRef(points, faces), parallel); + useComponents_ = true; + surf_ = std::cref(emptySurface_); + surfComp_.reset(points, faces); + parallel_ = (parallel && Pstream::parRun()); } @@ -372,13 +383,18 @@ bool Foam::surfaceWriter::expire() bool Foam::surfaceWriter::hasSurface() const { - return (&emptySurface_ != &(surf_.get())); + return (useComponents_ || (&emptySurface_ != &(surf_.get()))); } bool Foam::surfaceWriter::empty() const { - const bool value = surf_.get().faces().empty(); + const bool value = + ( + useComponents_ + ? surfComp_.faces().empty() + : surf_.get().faces().empty() + ); return (parallel_ ? returnReduce(value, andOp()) : value); } @@ -386,7 +402,12 @@ bool Foam::surfaceWriter::empty() const Foam::label Foam::surfaceWriter::size() const { - const label value = surf_.get().faces().size(); + const bool value = + ( + useComponents_ + ? surfComp_.faces().empty() + : surf_.get().faces().empty() + ); return (parallel_ ? returnReduce(value, sumOp