Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
openfoam
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Development
openfoam
Commits
e56e195a
Commit
e56e195a
authored
4 years ago
by
Mark OLESEN
Browse files
Options
Downloads
Patches
Plain Diff
ENH: support objectRegistry store of refPtr (as per tmp)
parent
487002d2
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/OpenFOAM/db/regIOobject/regIOobject.H
+35
-29
35 additions, 29 deletions
src/OpenFOAM/db/regIOobject/regIOobject.H
src/OpenFOAM/db/regIOobject/regIOobjectI.H
+57
-16
57 additions, 16 deletions
src/OpenFOAM/db/regIOobject/regIOobjectI.H
with
92 additions
and
45 deletions
src/OpenFOAM/db/regIOobject/regIOobject.H
+
35
−
29
View file @
e56e195a
...
...
@@ -42,6 +42,8 @@ SourceFiles
#define regIOobject_H
#include
"IOobject.H"
#include
"refPtr.H"
#include
"tmp.H"
#include
"typeInfo.H"
#include
"stdFoam.H"
#include
"OSspecific.H"
...
...
@@ -52,6 +54,8 @@ SourceFiles
namespace
Foam
{
// Forward Declarations
namespace
functionEntries
{
class
codeStream
;
...
...
@@ -59,7 +63,6 @@ namespace functionEntries
namespace
fileOperations
{
class
uncollatedFileOperation
;
class
masterUncollatedFileOperation
;
}
/*---------------------------------------------------------------------------*\
...
...
@@ -118,11 +121,9 @@ private:
public:
//- Declare friendship with classes that need access to
//- masterOnlyReading
//- Friendship with classes needing access to masterOnlyReading
friend
class
functionEntries
::
codeStream
;
friend
class
fileOperations
::
uncollatedFileOperation
;
friend
class
fileOperations
::
masterUncollatedFileOperation
;
// Static data
...
...
@@ -184,41 +185,46 @@ public:
// \return true if now ownedByRegistry
inline
bool
store
();
//- Register object pointer with its registry
//- and transfer ownership to the registry.
// \return reference to the object.
//- Transfer pointer ownership to its registry.
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
Type
*
p
);
//- Register object pointer with its registry
//- and transfer ownership to the registry.
// Clears the autoPtr parameter.
// \return reference to the object.
//- Transfer pointer ownership to its registry.
// Resets (clears) the parameter.
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
autoPtr
<
Type
>&
a
ptr
);
inline
static
Type
&
store
(
autoPtr
<
Type
>&
ptr
);
//- Register object pointer with its registry
//- and transfer ownership to the registry.
// Clears the autoPtr parameter.
// \return reference to the object.
//- Transfer pointer ownership to its registry.
// Resets (clears) the parameter.
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
autoPtr
<
Type
>&&
ptr
);
//- Transfer pointer ownership to its registry.
// Changes parameter from PTR to CREF (do not rely on this).
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
refPtr
<
Type
>&
ptr
);
//- Transfer pointer ownership to its registry.
// Changes parameter from PTR to CREF (do not rely on this).
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
auto
Ptr
<
Type
>&&
a
ptr
);
inline
static
Type
&
store
(
ref
Ptr
<
Type
>&&
ptr
);
//- Register temporary pointer with its registry
//- and transfer ownership of pointer to the registry.
// After the call, tmp parameter changes from PTR to CREF.
//
// \return reference to the object.
//- Transfer pointer ownership to its registry.
// Changes parameter from PTR to CREF (do not rely on this).
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
tmp
<
Type
>&
t
ptr
);
inline
static
Type
&
store
(
tmp
<
Type
>&
ptr
);
//- Register temporary pointer with its registry
//- and transfer ownership of pointer to the registry.
// After the call, the tmp parameter content is \em unspecified.
//
// \return reference to the object.
//- Transfer pointer ownership to its registry.
// Changes parameter from PTR to CREF (do not rely on this).
// \return reference to the stored object
template
<
class
Type
>
inline
static
Type
&
store
(
tmp
<
Type
>&&
t
ptr
);
inline
static
Type
&
store
(
tmp
<
Type
>&&
ptr
);
//- Release ownership of this object from its registry
// \param unregister optionally set as non-registered
...
...
This diff is collapsed.
Click to expand it.
src/OpenFOAM/db/regIOobject/regIOobjectI.H
+
57
−
16
View file @
e56e195a
...
...
@@ -75,47 +75,88 @@ inline Type& Foam::regIOobject::store(Type* p)
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
autoPtr
<
Type
>&
a
ptr
)
inline
Type
&
Foam
::
regIOobject
::
store
(
autoPtr
<
Type
>&
ptr
)
{
// Pass management to objectRegistry
return
store
(
a
ptr
.
release
());
return
store
(
ptr
.
release
());
}
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
autoPtr
<
Type
>&&
a
ptr
)
inline
Type
&
Foam
::
regIOobject
::
store
(
autoPtr
<
Type
>&&
ptr
)
{
// Pass management to objectRegistry
return
store
(
a
ptr
.
release
());
return
store
(
ptr
.
release
());
}
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
tmp
<
Type
>&
t
ptr
)
inline
Type
&
Foam
::
regIOobject
::
store
(
refPtr
<
Type
>&
ptr
)
{
Type
*
p
=
nullptr
;
if
(
t
ptr
.
is
Tmp
())
if
(
ptr
.
is
_pointer
())
{
// Pass management to objectRegistry
p
=
tptr
.
ptr
();
// Acquire ownership, pass management to objectRegistry
p
=
ptr
.
ptr
();
store
(
p
);
// Change parameter to access the stored reference
ptr
.
cref
(
*
p
);
}
else
{
// Taking ownership of reference does not make much sense.
// - Storing the object won't actually do so, it will be removed
// when the original object goes out of scope.
// - Storing a clone may not be what we want.
p
=
ptr
.
get
();
WarningInFunction
<<
"Refuse to store reference: "
<<
p
->
name
()
<<
". Likely indicates a coding error
\n
"
;
}
return
*
p
;
}
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
refPtr
<
Type
>&&
ptr
)
{
// Forward as named reference, which also does a move
return
store
(
ptr
);
}
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
tmp
<
Type
>&
ptr
)
{
Type
*
p
=
nullptr
;
if
(
ptr
.
is_pointer
())
{
// Acquire ownership, pass management to objectRegistry
p
=
ptr
.
ptr
();
store
(
p
);
//
Adjust tmp<> access to use
the stored reference
t
ptr
.
cref
(
*
p
);
//
Change parameter to access
the stored reference
ptr
.
cref
(
*
p
);
}
else
{
// Taking ownership of
a const-ref
does not make much sense.
// Taking ownership of
reference
does not make much sense.
// - Storing the object won't actually do so, it will be removed
// when the original object goes out of scope.
// - Storing a clone may not be what we want.
p
=
t
ptr
.
get
();
p
=
ptr
.
get
();
WarningInFunction
<<
"Refuse to store
tmp to const-ref
: "
<<
p
->
name
()
<<
"Refuse to store
reference
: "
<<
p
->
name
()
<<
". Likely indicates a coding error
\n
"
;
}
...
...
@@ -124,10 +165,10 @@ inline Type& Foam::regIOobject::store(tmp<Type>& tptr)
template
<
class
Type
>
inline
Type
&
Foam
::
regIOobject
::
store
(
tmp
<
Type
>&&
t
ptr
)
inline
Type
&
Foam
::
regIOobject
::
store
(
tmp
<
Type
>&&
ptr
)
{
//
Treat like
a n
ormal
reference
return
store
(
t
ptr
);
//
Forward
a
s
n
amed
reference
, which also does a move
return
store
(
ptr
);
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment