mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: cleanup autoPtr class (issue #639)
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_();
This commit is contained in:
@ -262,12 +262,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlock
|
||||
is.fatalCheck("read(Istream&) : reading entry");
|
||||
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
is.name()
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
is.name()
|
||||
)
|
||||
);
|
||||
|
||||
// Read header
|
||||
@ -314,12 +317,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlock
|
||||
is.fatalCheck("read(Istream&) : reading entry");
|
||||
}
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
is.name()
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
is.name()
|
||||
)
|
||||
);
|
||||
|
||||
// Apply master stream settings to realIsPtr
|
||||
@ -484,12 +490,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlocks
|
||||
is.fatalCheck("read(Istream&) : reading entry");
|
||||
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
)
|
||||
);
|
||||
|
||||
// Read header
|
||||
@ -538,12 +547,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlocks
|
||||
is >> data;
|
||||
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -567,12 +579,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlocks
|
||||
is.fatalCheck("read(Istream&) : reading entry");
|
||||
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
)
|
||||
);
|
||||
|
||||
// Read header
|
||||
@ -611,12 +626,15 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlocks
|
||||
is >> data;
|
||||
|
||||
string buf(data.begin(), data.size());
|
||||
realIsPtr = new IStringStream
|
||||
realIsPtr.reset
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
new IStringStream
|
||||
(
|
||||
buf,
|
||||
IOstream::ASCII,
|
||||
IOstream::currentVersion,
|
||||
fName
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user