mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Improve alignment of its behaviour with std::unique_ptr
- element_type typedef
- release() method - identical to ptr() method
- get() method to get the pointer without checking and without releasing it.
- operator*() for dereferencing
Method name changes
- renamed rawPtr() to get()
- renamed rawRef() to ref(), removed unused const version.
Removed methods/operators
- assignment from a raw pointer was deleted (was rarely used).
Can be convenient, but uncontrolled and potentially unsafe.
Do allow assignment from a literal nullptr though, since this
can never leak (and also corresponds to the unique_ptr API).
Additional methods
- clone() method: forwards to the clone() method of the underlying
data object with argument forwarding.
- reset(autoPtr&&) as an alternative to operator=(autoPtr&&)
STYLE: avoid implicit conversion from autoPtr to object type in many places
- existing implementation has the following:
operator const T&() const { return operator*(); }
which means that the following code works:
autoPtr<mapPolyMesh> map = ...;
updateMesh(*map); // OK: explicit dereferencing
updateMesh(map()); // OK: explicit dereferencing
updateMesh(map); // OK: implicit dereferencing
for clarity it may preferable to avoid the implicit dereferencing
- prefer operator* to operator() when deferenced a return value
so it is clearer that a pointer is involve and not a function call
etc Eg, return *meshPtr_; vs. return meshPtr_();
48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
IOdictionary pdfDictionary
|
|
(
|
|
IOobject
|
|
(
|
|
"pdfDict",
|
|
runTime.constant(),
|
|
runTime,
|
|
IOobject::MUST_READ_IF_MODIFIED,
|
|
IOobject::NO_WRITE
|
|
)
|
|
);
|
|
|
|
const label nIntervals(readLabel(pdfDictionary.lookup("nIntervals")));
|
|
|
|
const label nSamples(readLabel(pdfDictionary.lookup("nSamples")));
|
|
|
|
const bool writeData(readBool(pdfDictionary.lookup("writeData")));
|
|
|
|
|
|
const fileName pdfPath = runTime.path()/"pdf";
|
|
mkDir(pdfPath);
|
|
|
|
Random rndGen;
|
|
|
|
autoPtr<distributionModel> p
|
|
(
|
|
distributionModel::New
|
|
(
|
|
pdfDictionary,
|
|
rndGen
|
|
)
|
|
);
|
|
|
|
const scalar xMin = p->minValue();
|
|
const scalar xMax = p->maxValue();
|
|
|
|
autoPtr<OFstream> filePtr;
|
|
if (writeData)
|
|
{
|
|
fileName fName = pdfPath/(p->type() + ".data");
|
|
Info<< "Writing " << p->type() << " data samples to file:" << nl
|
|
<< fName << nl << endl;
|
|
|
|
filePtr.reset(new OFstream(fName));
|
|
}
|
|
|
|
scalarField samples(nIntervals, 0);
|