#include namespace obb::geomail { namespace { std::deque s_pending; constexpr std::size_t kMaxBuffer = 32; } void queue_init() { s_pending.clear(); } void enqueue_message(const GeoMailMessage &msg) { if (s_pending.size() >= kMaxBuffer) { s_pending.pop_front(); } s_pending.push_back(msg); } std::vector snapshot_queue(std::size_t limit) { std::vector out; out.reserve(std::min(limit, s_pending.size())); for (const auto &msg : s_pending) { out.push_back(msg); if (out.size() >= limit) break; } return out; } void mark_acknowledged(uint32_t timestamp) { s_pending.erase(std::remove_if(s_pending.begin(), s_pending.end(), [&](const GeoMailMessage &msg) { return msg.timestamp == timestamp; }), s_pending.end()); } }"> #include namespace obb::geomail { namespace { std::deque s_pending; constexpr std::size_t kMaxBuffer = 32; } void queue_init() { s_pending.clear(); } void enqueue_message(const GeoMailMessage &msg) { if (s_pending.size() >= kMaxBuffer) { s_pending.pop_front(); } s_pending.push_back(msg); } std::vector snapshot_queue(std::size_t limit) { std::vector out; out.reserve(std::min(limit, s_pending.size())); for (const auto &msg : s_pending) { out.push_back(msg); if (out.size() >= limit) break; } return out; } void mark_acknowledged(uint32_t timestamp) { s_pending.erase(std::remove_if(s_pending.begin(), s_pending.end(), [&](const GeoMailMessage &msg) { return msg.timestamp == timestamp; }), s_pending.end()); } }"> #include namespace obb::geomail { namespace { std::deque s_pending; constexpr std::size_t kMaxBuffer = 32; } void queue_init() { s_pending.clear(); } void enqueue_message(const GeoMailMessage &msg) { if (s_pending.size() >= kMaxBuffer) { s_pending.pop_front(); } s_pending.push_back(msg); } std::vector snapshot_queue(std::size_t limit) { std::vector out; out.reserve(std::min(limit, s_pending.size())); for (const auto &msg : s_pending) { out.push_back(msg); if (out.size() >= limit) break; } return out; } void mark_acknowledged(uint32_t timestamp) { s_pending.erase(std::remove_if(s_pending.begin(), s_pending.end(), [&](const GeoMailMessage &msg) { return msg.timestamp == timestamp; }), s_pending.end()); } }">
#include "app/ui/geomail/obb_geomail_threads.h"

#include <algorithm>
#include <deque>

namespace obb::geomail {

namespace {
std::deque<GeoMailMessage> s_pending;
constexpr std::size_t kMaxBuffer = 32;
}

void queue_init() {
  s_pending.clear();
}

void enqueue_message(const GeoMailMessage &msg) {
  if (s_pending.size() >= kMaxBuffer) {
    s_pending.pop_front();
  }
  s_pending.push_back(msg);
}

std::vector<GeoMailMessage> snapshot_queue(std::size_t limit) {
  std::vector<GeoMailMessage> out;
  out.reserve(std::min(limit, s_pending.size()));
  for (const auto &msg : s_pending) {
    out.push_back(msg);
    if (out.size() >= limit) break;
  }
  return out;
}

void mark_acknowledged(uint32_t timestamp) {
  s_pending.erase(std::remove_if(s_pending.begin(), s_pending.end(),
                                  [&](const GeoMailMessage &msg) {
                                    return msg.timestamp == timestamp;
                                  }),
                  s_pending.end());
}

}  // namespace obb::geomail