2017-07-21 16:21:34 +00:00
|
|
|
/******************************************************************************
|
2024-01-17 13:31:45 +00:00
|
|
|
* QSkinny - Copyright (C) The authors
|
2023-04-06 07:23:37 +00:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2017-07-21 16:21:34 +00:00
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#include "QskGraphicProviderMap.h"
|
|
|
|
#include "QskGraphicProvider.h"
|
|
|
|
|
2018-07-19 12:10:48 +00:00
|
|
|
#include <qhash.h>
|
|
|
|
#include <qpointer.h>
|
2018-08-03 06:15:28 +00:00
|
|
|
#include <qstring.h>
|
2017-07-21 16:21:34 +00:00
|
|
|
|
|
|
|
static inline QString qskKey( const QString& providerId )
|
|
|
|
{
|
|
|
|
return providerId.toLower();
|
|
|
|
}
|
|
|
|
|
|
|
|
class QskGraphicProviderMap::PrivateData
|
|
|
|
{
|
2018-08-03 06:15:28 +00:00
|
|
|
public:
|
2017-07-21 16:21:34 +00:00
|
|
|
QHash< QString, QPointer< QskGraphicProvider > > hashTab;
|
|
|
|
};
|
|
|
|
|
2018-08-03 06:15:28 +00:00
|
|
|
QskGraphicProviderMap::QskGraphicProviderMap()
|
|
|
|
: m_data( new PrivateData() )
|
2017-07-21 16:21:34 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
QskGraphicProviderMap::~QskGraphicProviderMap()
|
|
|
|
{
|
2024-01-30 12:32:36 +00:00
|
|
|
qDeleteAll( m_data->hashTab );
|
|
|
|
}
|
|
|
|
|
|
|
|
void QskGraphicProviderMap::clear()
|
|
|
|
{
|
|
|
|
qDeleteAll( m_data->hashTab );
|
|
|
|
m_data->hashTab.clear();
|
2017-07-21 16:21:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void QskGraphicProviderMap::insert(
|
|
|
|
const QString& providerId, QskGraphicProvider* provider )
|
|
|
|
{
|
|
|
|
if ( provider == nullptr )
|
|
|
|
{
|
|
|
|
remove( providerId );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_data->hashTab.insert( qskKey( providerId ),
|
|
|
|
QPointer< QskGraphicProvider >( provider ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void QskGraphicProviderMap::remove( const QString& providerId )
|
|
|
|
{
|
2022-03-25 12:39:18 +00:00
|
|
|
delete take( providerId );
|
2017-07-21 16:21:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QskGraphicProvider* QskGraphicProviderMap::take( const QString& providerId )
|
|
|
|
{
|
|
|
|
QskGraphicProvider* provider = nullptr;
|
|
|
|
|
2022-03-24 07:20:05 +00:00
|
|
|
const auto it = m_data->hashTab.constFind( qskKey( providerId ) );
|
2022-03-25 12:39:18 +00:00
|
|
|
if ( it != m_data->hashTab.constEnd() )
|
|
|
|
{
|
2017-07-21 16:21:34 +00:00
|
|
|
provider = it.value();
|
2022-03-25 12:39:18 +00:00
|
|
|
m_data->hashTab.erase( it );
|
|
|
|
}
|
2017-07-21 16:21:34 +00:00
|
|
|
|
|
|
|
return provider;
|
|
|
|
}
|
|
|
|
|
|
|
|
QskGraphicProvider* QskGraphicProviderMap::provider( const QString& providerId ) const
|
|
|
|
{
|
2022-03-24 07:20:05 +00:00
|
|
|
const auto it = m_data->hashTab.constFind( qskKey( providerId ) );
|
|
|
|
if ( it == m_data->hashTab.constEnd() )
|
2017-07-21 16:21:34 +00:00
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
if ( it.value().isNull() )
|
|
|
|
{
|
|
|
|
// someone outside has deleted the provider, we can remove the entry
|
|
|
|
m_data->hashTab.erase( it );
|
|
|
|
}
|
|
|
|
|
|
|
|
return it.value();
|
|
|
|
}
|
|
|
|
|
|
|
|
int QskGraphicProviderMap::size() const
|
|
|
|
{
|
|
|
|
// might not be correct, when providers have been deleted
|
|
|
|
// from the outside. TODO ...
|
|
|
|
|
|
|
|
return m_data->hashTab.count();
|
|
|
|
}
|