Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
amdis
amdis-core
Commits
56ddc859
Commit
56ddc859
authored
May 06, 2019
by
Praetorius, Simon
Browse files
add fake container-like datastructure with all no-op
parent
e01dcaf2
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/amdis/common/CMakeLists.txt
View file @
56ddc859
...
@@ -10,6 +10,7 @@ install(FILES
...
@@ -10,6 +10,7 @@ install(FILES
Concepts.hpp
Concepts.hpp
ConceptsBase.hpp
ConceptsBase.hpp
ConcurrentCache.hpp
ConcurrentCache.hpp
FakeContainer.hpp
FieldMatVec.hpp
FieldMatVec.hpp
FieldMatVec.inc.hpp
FieldMatVec.inc.hpp
Filesystem.hpp
Filesystem.hpp
...
...
src/amdis/common/FakeContainer.hpp
0 → 100644
View file @
56ddc859
#pragma once
#include
<cstddef>
namespace
AMDiS
{
struct
FakeAssigner
{
template
<
class
T
>
FakeAssigner
&
operator
=
(
T
&&
)
{
return
*
this
;
}
template
<
class
T
>
FakeAssigner
&
operator
+=
(
T
&&
)
{
return
*
this
;
}
template
<
class
T
>
FakeAssigner
&
operator
-=
(
T
&&
)
{
return
*
this
;
}
template
<
class
T
>
FakeAssigner
&
operator
*=
(
T
&&
)
{
return
*
this
;
}
template
<
class
T
>
FakeAssigner
&
operator
/=
(
T
&&
)
{
return
*
this
;
}
};
/// A container-like data-structure not storing anything and with empty
/// implementations in many container-interface functions.
/**
* This container that *does nothing* can be used as a dummy argument to
* functions expecting a container, in order to ommit specializations of
* these functions for not providing a container.
**/
class
FakeContainer
:
public
FakeAssigner
{
public:
using
size_type
=
std
::
size_t
;
template
<
class
...
Args
>
FakeContainer
(
Args
&&
...)
{}
template
<
class
Arg
>
void
push_back
(
Arg
&&
)
{}
template
<
class
...
Args
>
void
emplace_back
(
Args
&&
...)
{}
void
reserve
(
size_type
)
{}
void
resize
(
size_type
)
{}
/// This container is always empty
bool
empty
()
const
{
return
true
;
}
size_type
size
()
const
{
return
0u
;
}
/// Mutable *element* access does return the container itself
/// This allows to emulate nested containers
FakeContainer
&
operator
[](
size_type
)
{
return
*
this
;
}
/// Assignment operators from a fake assigner
using
FakeAssigner
::
operator
=
;
using
FakeAssigner
::
operator
+=
;
using
FakeAssigner
::
operator
-=
;
using
FakeAssigner
::
operator
*=
;
using
FakeAssigner
::
operator
/=
;
FakeAssigner
front
()
{
return
{};
}
FakeAssigner
back
()
{
return
{};
}
friend
inline
FakeAssigner
front
(
FakeContainer
&
)
{
return
{};
}
friend
inline
FakeAssigner
back
(
FakeContainer
&
)
{
return
{};
}
};
}
// end namespace AMDiS
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment