#include "IDGenerator.h" #include #include #include qint64 IDGenerator::new_id() { if (!m_recycle_id.isEmpty()) { int id = m_recycle_id.begin().key(); m_recycle_id.erase(m_recycle_id.begin()); return id; } if(!m_use_id.isEmpty()) { while (m_use_id.contains(m_id)) { m_id++; } return m_id; } return m_id++; } void IDGenerator::recylce_id(qint64 id) { m_recycle_id.insert(id, 0); } qint64 IDGenerator::next_id() { if (!m_recycle_id.isEmpty()) { int id = m_recycle_id.cbegin().key(); return id; } return m_id; } void IDGenerator::use_id(qint64 id) { m_use_id.insert(id, 0); } QByteArray IDGenerator::to_bytes() const { QByteArray bytes; QDataStream stream(&bytes, QIODevice::WriteOnly); stream << m_id << m_recycle_id; return bytes.toBase64(); //目的:QVariant转换成字符串时会截断'\0' } void IDGenerator::from_bytes(const QByteArray& bytes) { QByteArray _bytes = QByteArray::fromBase64(bytes); QDataStream stream(&_bytes, QIODevice::ReadOnly); stream >> m_id >> m_recycle_id; }