You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.6 KiB
C++

#include "FITKDataRepo.h"
#include "FITKAbstractDataManagerHelper.h"
namespace Core
{
//静态变量初始化
FITKDataRepo* FITKDataRepo::_instance = nullptr;
QMutex FITKDataRepo::m_mutex;
int FITKDataRepo::getDataCount()
{
//线程安全
QMutexLocker locker(&m_mutex);
return _repoPrivate.getDataCount();
}
Core::FITKAbstractDataObject* FITKDataRepo::getDataByID(const int id)
{
//线程安全
QMutexLocker locker(&m_mutex);
return _repoPrivate.getDataByID(id);
}
void FITKDataRepo::resetRepo( QList<int> save /*= { -1 }*/)
{
// QMutexLocker locker(&m_mutex);
//获取保留的最大ID
int maxid =0;
QList<FITKAbstractDataObject*> releaseObjs;
//遍历全部,记录需要删除的对象
const int n = _repoPrivate.getDataCount();
for (int i = 0; i < n; ++i)
{
auto v = _repoPrivate.getDataByIndex(i);
if (v == nullptr) continue;
const int id = v->getDataObjectID();
//记录最大ID
if (save.contains(id))
{
maxid = id > maxid ? id : maxid;
continue;
}
releaseObjs.append(v);
}
//删除
for (FITKAbstractDataObject* obj : releaseObjs)
_repoPrivate.removeDataObj(obj);
//设置最大ID
FITKAbstractDataObject::ResetMaxID(maxid);
}
void FITKDataRepo::initialize()
{
//初始化
}
void FITKDataRepo::finalize()
{
// _repoPrivate.clear();
}
void FITKDataRepo::addDataObj(FITKAbstractDataObject* obj)
{
//追加
QMutexLocker locker(&m_mutex);
_repoPrivate.appendDataObj(obj);
}
void FITKDataRepo::removeDataObj(FITKAbstractDataObject* obj)
{
// QMutexLocker locker(&m_mutex);
_repoPrivate.remveFromListOnly(obj);
}
void FITKDataRepoPrivate::appendDataObj(FITKAbstractDataObject* item)
{
FITKAbstractDataManager<FITKAbstractDataObject>::appendDataObj(item);
}
void FITKDataRepoPrivate::remveFromListOnly(FITKAbstractDataObject* obj)
{
while (_dataList.contains(obj))
_dataList.removeOne(obj);
}
FITKDataRepoDeleator::~FITKDataRepoDeleator()
{
if (FITKDataRepo::_instance)
delete FITKDataRepo::_instance;
FITKDataRepo::_instance = nullptr;
}
static FITKDataRepoDeleator DELEATOR_;
}