Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1494213
SystemImpl.hpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
2 KB
Referenced Files
None
Subscribers
None
SystemImpl.hpp
View Options
/***************************************************************************//**
*
* \file core/SystemImpl.hpp
*
* \author David Juhasz (david.juhasz@tuwien.ac.at)
*
* \date 2017
*
* \brief Declaration of a basic implementation of the `rosa::System` interface.
*
******************************************************************************/
#ifndef ROSA_LIB_CORE_SYSTEMIMPL_HPP
// NOLINT
#define ROSA_LIB_CORE_SYSTEMIMPL_HPP
#include
"rosa/core/SystemBase.hpp"
#include
<mutex>
#include
<unordered_set>
namespace
rosa
{
/// A basic implementation of the `rosa::System` interface, which is based on
/// `rosa::SystemBase`and simply stores `rosa::Unit` instances in a set.
class
SystemImpl
:
public
SystemBase
{
public
:
/// Creates a new instance.
///
/// \param Name name of the new instance
SystemImpl
(
const
std
::
string
&
Name
)
noexcept
;
/// Destroys `this` object.
///
/// \note The destructor deallocates internal resources and marks `this`
/// object cleaned.
///
/// \pre No live `rosa::Unit` instances are managed by `this`
/// object:\code
/// empty()
/// \endcode
~
SystemImpl
(
void
);
private
:
/// Stores references for the registered `rosa::Unit` instances.
std
::
unordered_set
<
Unit
*>
Units
;
/// Provides mutual exclusion when modifying `rosa::Unit` instances.
std
::
mutex
RegisterMutex
;
protected
:
/// Registers a `rosa::Unit` instance to `this` object.
///
/// \param U `rosa::Unit` to register
///
/// \pre `this` object has not yet been marked as cleaned and `U` is not
/// registered yet:\code
/// !isSystemCleaned() && !isUnitRegistered(U)
/// \endcode
///
/// \post `U` is registered:\code
/// isUnitRegistered(U)
/// \endcode
void
registerUnit
(
Unit
&
U
)
noexcept
override
;
/// Unregisters and destroys a registered `rosa::Unit` instance.
///
/// \param U `rosa::Unit` to destroy
///
/// \pre `U` is registered:\code
/// isUnitRegistered(U)
/// \endcode
///
/// \post `U` is not registered:\code
/// !isUnitRegistered(U)
/// \endcode Moreover, `U` is destroyed.
void
destroyUnit
(
Unit
&
U
)
noexcept
override
;
/// Tells if a `rosa::Unit` is registered in `this` object.
///
/// \param U `rosa::Unit` to check
///
/// \return whether `U` is registered in `this` object
bool
isUnitRegistered
(
const
Unit
&
U
)
const
noexcept
override
;
public
:
/// Tells the number of live `rosa::Unit` instances in the context `this`
/// object, those being constructed and not destroyed yet.
///
/// \return number of `rosa::Unit` instances alive
size_t
numberOfLiveUnits
(
void
)
const
noexcept
override
;
/// Tells if `this` object has no live `rosa::Unit` instances.
///
/// \return whether `this` object has any live `rosa::Unit` instances
bool
empty
(
void
)
const
noexcept
override
;
};
}
// End namespace rosa
#endif
// ROSA_LIB_CORE_SYSTEMIMPL_HPP
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sun, Mar 1, 6:35 PM (1 d, 22 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
287483
Default Alt Text
SystemImpl.hpp (2 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment