Comments (2)
Here's an untested/uncompiled strawman to be included in the any_iterator
benchmarks:
namespace { namespace variant {
template <typename Derived>
struct concept_t {
friend bool operator==(Derived const& a, Derived const& b) {
return a.equal(b);
}
Derived& operator++() {
static_cast<Derived*>(this)->increment();
return *this;
}
decltype(auto) operator*() {
return static_cast<Derived*>(this)->dereference();
}
};
template <typename Iterator>
struct model_t : concept_t<Iterator> {
model_t(Iterator it) : it_{it} { }
bool equal(model_t const& other) { return it_ == other.it_; }
void increment() { ++it_; }
typename Iterator::reference dereference() { return *it_; }
private:
Iterator it_;
}
template <typename... Ts>
struct variant {
// TODO: implement
};
template <typename F f, typename T>
decltype(auto) visit(F&&, T&& x) {
// TODO: apply f(x)
}
template <typename... Ts>
using iterator_variant = variant<model_t<Ts>...>;
template <typename Value, typename Reference = Value&>
struct any_iterator : concept_t<any_iterator<Value, Reference>> {
using value_type = Value;
using reference = Reference;
template <typename Iterator>
explicit any_iterator(Iterator it)
: v_{model_t<Iterator>{it}}
{ }
bool equal(any_iterator const& other) {
return v_ == other.v_; // relies on variant<Ts>::operator==
}
void increment() {
visit([](auto& x) { ++x; }, v_);
}
Reference dereference() {
return visit([](auto& x) { *x; }, v_);
}
private:
iterator_variant<Value> v_;
};
}} // end namespace variant
I hope that goes in the right direction. It's a bit quirky because unlike the other approaches to type-erasure, the variant is bounded a priori. So the corresponding any_iterator
is a bit clunky: right now it only holds one value.
from dyno.
Closed by #18.
from dyno.
Related Issues (20)
- Provide a vtable implementation based on a switch statement
- Tone down documentation about speed of vtable dispatch
- Use a less generic user-defined literal HOT 4
- Cannot find HanaConfig.cmake HOT 4
- Allow specifying special member functions with DYNO_INTERFACE HOT 1
- Refactor dyno::poly
- Add test coverage for storage policies
- Add test coverage for vtable policies
- Please add Conan Repository support HOT 9
- Please create a C++20 proposal HOT 1
- Please submit to BOOST HOT 1
- make dyno::non_owning_storage the default HOT 1
- Arity and multiple SBO
- Documentation revisions: additional reasons for using this library
- Unnecessary copies for non-macro remote_storage interfaces HOT 1
- Memory is not laundered after placement newing
- Wrong static_assert in detail::erase
- Problem with GCC 8: Example does not compile b/c `poly::unerase_poly` is not declared. HOT 3
- 'concept' and 'requires' are keywords in c++2a HOT 4
- Compile time code generation HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dyno.