Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F25859732
Message.hpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
2 KB
Referenced Files
None
Subscribers
None
Message.hpp
View Options
/*******************************************************************************
*
* File: Message.hpp
*
* Contents: Declaration of Message base-class.
*
* Copyright 2017
*
* Author: David Juhasz (david.juhasz@tuwien.ac.at)
*
******************************************************************************/
#ifndef ROSA_CORE_MESSAGE_HPP
#define ROSA_CORE_MESSAGE_HPP
#include
"rosa/support/log.h"
#include
"rosa/support/type_token.hpp"
namespace
rosa
{
// Message interface. The interface provides means to check the type of the
// stored values, but actual data is to be managed by derived implementations.
// Messages are immutable data objects, obtaining their data upon creation and
// providing only constant references for the stored values.
// NOTE: Any reference obtained from a Message instance remains valid only as
// long as the owning Message object is not destroyed.
class
Message
{
protected
:
// Ctor.
// NOTE: No implementation for empty list.
template
<
typename
Type
,
typename
...
Ts
>
Message
(
Type
,
Ts
...)
noexcept
;
// No copy and move.
Message
(
const
Message
&
)
=
delete
;
Message
(
Message
&&
)
=
delete
;
Message
&
operator
=
(
const
Message
&
)
=
delete
;
Message
&
operator
=
(
Message
&&
)
=
delete
;
public
:
// A valid, non-empty token representing the types of the values stored in
// the Message.
const
Token
T
;
// The number of types encoded in T, that is the number of values stored in
// Message.
const
size_t
Size
;
// Virtual dtor.
virtual
~
Message
(
void
);
// Tells if the value in position Pos is of type Type.
// NOTE: Token encodes atoms as AtomValue and not directly AtomConstants.
// PRE: Pos < Size
template
<
typename
Type
>
bool
isTypeAt
(
const
size_t
Pos
)
const
noexcept
;
// Gives a constant reference of the value of type Type in position Pos.
// PRE: Pos < Size && isTypeAt(Pos)
template
<
typename
Type
>
const
Type
&
getValueAt
(
const
size_t
Pos
)
const
noexcept
;
protected
:
// Provides an untyped pointer for the value in position Pos.
// PRE: Pos < Size
virtual
const
void
*
getPointerTo
(
const
size_t
Pos
)
const
noexcept
=
0
;
};
template
<
typename
Type
,
typename
...
Ts
>
Message
::
Message
(
Type
,
Ts
...)
noexcept
:
T
(
TypeToken
<
Type
,
Ts
...
>::
Value
),
Size
(
lengthOfToken
(
T
))
{
ASSERT
(
validToken
(
T
)
&&
lengthOfToken
(
T
)
==
(
1
+
sizeof
...(
Ts
)));
// Sanity check.
LOG_TRACE
(
"Creating Message with Token("
+
to_string
(
T
)
+
")"
);
}
template
<
typename
Type
>
bool
Message
::
isTypeAt
(
const
size_t
Pos
)
const
noexcept
{
ASSERT
(
Pos
<
Size
);
Token
T_
=
T
;
// NOLINT
dropNOfToken
(
T_
,
Pos
);
return
isHeadOfTokenTheSameType
<
Type
>
(
T_
);
}
template
<
typename
Type
>
const
Type
&
Message
::
getValueAt
(
const
size_t
Pos
)
const
noexcept
{
ASSERT
(
Pos
<
Size
&&
isTypeAt
<
Type
>
(
Pos
));
return
*
static_cast
<
const
Type
*>
(
getPointerTo
(
Pos
));
}
}
// End namespace rosa
#endif
// ROSA_CORE_MESSAGE_HPP
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sat, Aug 29, 4:23 PM (1 d, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
341809
Default Alt Text
Message.hpp (2 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment