template<typename F>
struct ScheduledFrames
{
- void store(F& val)
+ void store(F const& val)
{
std::unique_lock<std::mutex> lk(mapMutex_);
auto it = map_.find(val.index());
if (it == map_.end())
- map_[val.index()] = val;
+ map_.emplace(std::make_pair(val.index(), val));
}
- F retrieve(size_t index, bool &success)
+ boost::optional<F> retrieve(size_t index)
{
std::unique_lock<std::mutex> lk(mapMutex_);
- success = false;
auto it = map_.find(index);
if(it == map_.end())
- return F();
+ return {};
- success = true;
F val = it->second;
map_.erase(index);
~ScheduledMessenger(void) {
shutdown();
}
- bool scheduleCompress(F proxy, std::function<void(BufferSrc)> converter){
+ bool scheduleCompress(F const& proxy, std::function<void(BufferSrc const&)> converter){
size_t frameSize = init_.uncompressedFrameSize_;
assert(frameSize >= init_.uncompressedFrameSize_);
BufferSrc src;
auto compressedFrameId = msg.nextUint();
auto compressedFrameLength = msg.nextUint();
if (!needsRecompression) {
- bool success = false;
- auto srcFrame = scheduledFrames_.retrieve(clientFrameId,success);
- if (!success)
+ auto src_frame = scheduledFrames_.retrieve(clientFrameId);
+ if (!src_frame) {
return;
- processor(srcFrame, getCompressedFrame(compressedFrameId),compressedFrameLength);
+ }
+ processor(*src_frame, getCompressedFrame(compressedFrameId),compressedFrameLength);
}
++framesCompressed_;
send(GRK_MSGR_BATCH_PROCESSSED_COMPRESSED, compressedFrameId);
}
}
- F retrieve(size_t index, bool &success) {
- return scheduledFrames_.retrieve(index, success);
+
+ boost::optional<F> retrieve(size_t index) {
+ return scheduledFrames_.retrieve(index);
}
+
void store(F& val) {
scheduledFrames_.store(val);
}