Skip to content
Snippets Groups Projects
Commit 56ddc859 authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

add fake container-like datastructure with all no-op

parent e01dcaf2
Branches
No related tags found
1 merge request!52add fake container-like datastructure with all no-op
......@@ -10,6 +10,7 @@ install(FILES
Concepts.hpp
ConceptsBase.hpp
ConcurrentCache.hpp
FakeContainer.hpp
FieldMatVec.hpp
FieldMatVec.inc.hpp
Filesystem.hpp
......
#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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment