Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F112778201
released_object.hh
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, May 12, 23:01
Size
2 KB
Mime Type
text/x-c++
Expires
Wed, May 14, 23:01 (2 d)
Engine
blob
Format
Raw Data
Handle
26141546
Attached To
rLIBMULTISCALE LibMultiScale
released_object.hh
View Options
#ifndef __LIBMULTISCALE_RELEASED_OBJECT_HH__
#define __LIBMULTISCALE_RELEASED_OBJECT_HH__
/* -------------------------------------------------------------------------- */
#include "auto_arguments.hh"
#include "lm_common.hh"
/* -------------------------------------------------------------------------- */
__BEGIN_LIBMULTISCALE__
/* -------------------------------------------------------------------------- */
class
CommGroup
;
/* -------------------------------------------------------------------------- */
class
ReleasedObject
:
public
AutoDispatch
::
Argument
{
public
:
ReleasedObject
()
{
release
=
0
;
}
//! return actual release
UInt
getRelease
()
const
{
return
release
;
};
//! return actual release
void
setRelease
(
UInt
r
)
{
release
=
r
;
};
//! increment the release
void
incRelease
()
{
++
release
;
};
// virtual void printself(std::ostream &os) const = 0;
// virtual void setCommGroup(CommGroup &c) = 0;
// virtual void _copyContainerInfo(ContainerInterface &) {}
// virtual void setCommGroup(CommGroup &c) override { _setCommGroup(value,
// c);
// };
template
<
typename
Dependencies
>
void
acquireRelease
(
const
Dependencies
&
deps
)
{
for
(
auto
&
pair
:
deps
)
{
auto
*
ptr
=
pair
.
second
;
if
(
ptr
==
nullptr
)
LM_FATAL
(
pair
.
first
<<
": input was not created/computed/connected"
);
release
=
std
::
max
(
release
,
(
*
ptr
)
->
getRelease
());
}
}
template
<
typename
Dependencies
>
bool
checkDependency
(
const
Dependencies
&
deps
)
{
for
(
auto
&
pair
:
deps
)
{
if
(
pair
.
second
==
nullptr
)
return
true
;
try
{
if
(
!
pair
.
second
->
has_value
())
return
true
;
auto
&
dep
=
pair
.
second
->
get
();
if
(
release
<
dep
.
getRelease
())
return
true
;
}
catch
(...)
{
return
true
;
}
}
return
false
;
}
private
:
UInt
release
;
};
/* -------------------------------------------------------------------------- */
__END_LIBMULTISCALE__
/* -------------------------------------------------------------------------- */
#endif
//__LIBMULTISCALE_RELEASED_OBJECT_HH__
Event Timeline
Log In to Comment