Comments (4)
Yes, yes it would be possible -- keep in mind, though, that a peek + pop() will always be less efficient than a single try_dequeue
(because much of the same logic has to be done twice for both). Obviously, though, there's a valid use case (as you've shown), and the overhead is almost certainly negligible anyway.
I'll implement it as soon as I have a few spare minutes :-)
from readerwriterqueue.
Alright, done. There's now a pop
method.
Another workaround (not previously possible until my last commit) is to create a wrapper container that just moves the memory out of the queue and into your object, e.g.:
template<typename T>
struct CtorlessAssignmentContainer
{
inline void operator=(T&& t)
{
std::memcpy(data, &t, sizeof(T));
}
inline T& obj() const { return *reinterpret_cast<T*>(data); }
private:
alignas(alignof(T)) char data[sizeof(T)];
};
Then:
CtorlessAssignmentContainer<MyType> current;
while(queue.try_dequeue(current)) {
MyType& myType = current.obj();
// ...
}
from readerwriterqueue.
thank you!! speed isn't that much of an issue in my current context, but it's good to have the workaround you posted as an alternative :)
from readerwriterqueue.
No problem :-)
from readerwriterqueue.
Related Issues (20)
- Select multiple queues HOT 2
- Support for Serialisation HOT 1
- can it use in ipc? HOT 5
- Can it support FreeRTOS? HOT 14
- What does this assert mean? HOT 9
- any tag/release planned? HOT 2
- bulk method HOT 1
- Circular Buffer force_enque HOT 5
- some questions HOT 3
- Queue as member variable breaks my program HOT 2
- Any way to copy a string into an element atomically? HOT 4
- Please add to README how to run tests HOT 1
- On an M1 on MacOS, when profiling with Tracy, ReadWriterQueue's try_enqueue / try_dequeue sometimes seem to cause spikes of several milliseconds HOT 6
- Deadlock with readerwriterqueue when spinning over try_enqueue() method HOT 1
- peek() method for BlockingReaderWriterCircularBuffer? HOT 4
- Circular Buffer Doesn't Overwrite Old Data HOT 2
- Help with profiling OSX M1 HOT 17
- Any plan on latest release tag HOT 2
- Memory allocation HOT 2
- Upload stable release archive HOT 1
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 readerwriterqueue.