DPS/DataPlatform/IDGenerator.cpp

61 lines
1.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}