Comments (2)
For ring_span<T, copy_popper<T>>
and ring_span<T, null_popper<T>>
, you could theoretically add a clear()
member function that just reset the "begin" and "end" of the span. For ring_span<T, default_popper<T>>
, such a member would be confusing unless it also called the popper on each existing element of the span.
Consider
std::vector<std::unique_ptr<Widget>> v(10);
sg14::ring_span<std::unique_ptr<Widget>> r(v.begin(), v.end());
r.push_back(std::make_unique<Widget>());
r.push_back(std::make_unique<Widget>());
r.clear(); // this needs to call ~Widget twice, somehow, right?
If you really want to leave the contents of the underlying array untouched, then you could just use the assignment operator:
std::vector<std::unique_ptr<Widget>> v(10);
sg14::ring_span<std::unique_ptr<Widget>> r(v.begin(), v.end());
r.push_back(std::make_unique<Widget>());
r.push_back(std::make_unique<Widget>());
r = sg14::ring_span<std::unique_ptr<Widget>>(v.begin(), v.end());
With that new information, does clear()
still appeal as a solution?
from sg14.
@Quuxplusone Thanks for responding.
I was looking at this implementation. I tried assignment, but then the compiler balked, not, when I do it the way you posted. So, yes that is a solution.
Having said that. Because we have people [probably not SG14's target group] who might want to put std::unique_ptr
held objects is a ring_span
others [who might just have a buffer of pods or aggregates of pods] have to pay a high price [higher than necessary, i.e. it violates "you don't pay for what you don't use"] for that [setting m_size
to zero ( with clear() ) should do]. Equally, all STL-containers support clear()
, and now we have a 'view' and all of a sudden we cannot use clear()
, this seems silly at best and is the world upside-down. Iff I have pods in an array, the should just wilt into the distance at no cost.
I think the design needs more work, because of this. I understand that unique_ptr's cause ownership issues (in this case, normally they try to solve them), but let's start and make this work well and as good as possible for pods (i.e. trivially_destructable and what have you). It needs to work well for all cases, though, as there is no alternative std::ring_buffer
in the STL (and Boost.Circular Buffer appears to be C++03).
from sg14.
Related Issues (20)
- [slot_map] constructors HOT 1
- [inplace_function] benchmark HOT 4
- [slot_map] Can you get a key using an iterator? HOT 5
- [slot_map] R1/R2 criticisms HOT 12
- [inplace_function] Ambiguous overloads. HOT 5
- [inplace_function] Should [](){return 42;} be convertible to inplace_function<void()>? HOT 1
- [inplace_function] make it usable without exceptions HOT 2
- inplace_function doesn't handle arguments with rvalue references well HOT 1
- [inplace function] Problems assigning if my starting point is empty/nullptr HOT 4
- [inplace_function] Const-callability means thread-safety HOT 4
- [inplace_function] Giant Sized Buffers Required for Compilation HOT 5
- volatile inplace_function fails to compile HOT 6
- License is missing on some includes HOT 1
- [inplace_function] Opt-in "safe" default constructed inplace_function HOT 7
- Provide CMake & Conan installation support
- slot_map: custom key causing clang to seg fault. HOT 1
- [inplace_function] usage at shared library boundaries HOT 5
- sg14::span_ring: class template argument deduction
- [inplace_function.h] Copyright holder 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 sg14.