#ifndef __OTX_JIDU_REPORT_QUEUE_HPP__
#define __OTX_JIDU_REPORT_QUEUE_HPP__

#include <queue>
#include <string>
#include <mutex>

namespace otx {
namespace jidu {

class ReportQueue {
public:
  ReportQueue() = default;
  ReportQueue(const ReportQueue &) = default;
  ReportQueue &operator=(const ReportQueue &) = default;

public:
  virtual ~ReportQueue();

private:
  std::queue<std::string *> mQueue;// 提高大字符串操作效率，采用指针。
  std::mutex mQueueLock;

public:
  /**
   * @brief 插入新元素。
   * 元素插入后的释放约定：
   * 1. clear或queue销毁时在内部自动全部释放（未被外部使用的元素）；
   * 2. 外部deque获得元素，使用后自行释放，deque后的元素无法在内部被跟踪（已被外部使用的元素）。
   * @param item 新元素。
   */
  virtual void enque(std::string *item);
  virtual std::string *deque();
  virtual std::size_t size();
  virtual void clear();
};

} // namespace jidu
} // namespace otx

#endif // __OTX_JIDU_REPORT_QUEUE_HPP__