Page MenuHomec4science

released_object.hh
No OneTemporary

File Metadata

Created
Wed, Jul 10, 01:54

released_object.hh

#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