DPS/DataPlatform/IDGenerator.cpp

61 lines
1.1 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#include "IDGenerator.h"
#include <QDataStream>
#include <QVariant>
#include<QIODevice>
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;
}