Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1493508
Unit.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
3 KB
Referenced Files
None
Subscribers
None
Unit.h
View Options
/***************************************************************************//**
*
* \file rosa/core/Unit.h
*
* \author David Juhasz (david.juhasz@tuwien.ac.at)
*
* \date 2017
*
* \brief Declaration of `rosa::Unit` base-class.
*
******************************************************************************/
#ifndef ROSA_CORE_UNIT_H
#define ROSA_CORE_UNIT_H
#include
"rosa/support/atom.hpp"
#include
"rosa/core/forward_declarations.h"
#include
<ostream>
#include
<string>
namespace
rosa
{
/// Base class for every entity in a `rosa::System` that has to be identified
/// and traced.
///
/// \note Life-cycle of `rosa::Unit` instances is supposed to be managed by the
/// `rosa::System` owning the instance, do not create and destroy any
/// `rosa::Unit` directly.
class
Unit
{
public
:
/// Identifies the *kind* of `this` object.
///
/// \note Kind is dependent on the `rosa::System` owning `this` object.
const
AtomValue
Kind
;
/// Unique identifier for `this` object.
///
/// The unique identifier is assigned by the `rosa::System` owning `this`
/// object and is based on `rosa::System::CountUnits` of the owning
/// `rosa::System`.
const
id_t
Id
;
/// Textual identifier of `this` object.
///
/// The textual identifier defaults to a text referring to `Id`, unless
/// otherwise defined via an argument for the constructor.
///
/// \note `Name` of a `rosa::Unit` instance is not necessarily unique in the
/// owning `rosa::System`.
const
std
::
string
Name
;
protected
:
/// The `rosa::System` owning `this` object.
System
&
S
;
public
:
/// Full qualified name of `this` object.
const
std
::
string
FullName
;
public
:
/// Creates a new instnace.
///
/// \param Kind the kind of the new instance
/// \param Id the unique identifier of the new instance
/// \param Name the name of the new instance
/// \param S `rosa::System` owning the new instance
///
/// \pre `Name` is not empty:\code
/// !Name.empty()
/// \endcode
Unit
(
const
AtomValue
Kind
,
const
id_t
Id
,
const
std
::
string
&
Name
,
System
&
S
)
noexcept
;
/// No copying and moving of `rosa::Unit` instances is possible.
///@{
Unit
(
const
Unit
&
)
=
delete
;
Unit
(
Unit
&&
)
=
delete
;
Unit
&
operator
=
(
const
Unit
&
)
=
delete
;
Unit
&
operator
=
(
Unit
&&
)
=
delete
;
///@}
/// Destroys `this` object.
virtual
~
Unit
(
void
);
/// Dumps `this` object into a `std::string` for tracing purposes.
///
/// Subclasses are supposed to override this function.
///
/// \return `string` representing the state of `this` object
virtual
std
::
string
dump
(
void
)
const
noexcept
;
protected
:
/// Returns a reference to the `rosa::System` owning `this` object.
///
/// \note Subclasses may override the function to return a reference of a
/// subtype of `rosa::System`.
///
/// \return reference of `S`
virtual
System
&
system
()
const
noexcept
;
};
/// Dumps a `rosa::Unit` isntance to a given `std::ostream`.
///
/// \param OS output stream to dump to
/// \param U `Unit` to dump
///
/// \return `OS` after dumping `U` to it
std
::
ostream
&
operator
<<
(
std
::
ostream
&
OS
,
const
Unit
&
U
);
}
// End namespace rosa
#endif
// ROSA_CORE_UNIT_H
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sun, Mar 1, 5:18 PM (2 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
284638
Default Alt Text
Unit.h (3 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment