Remove QTextCodec dependency from QCoreGobalData
As we want to move text codecs out of Qt Core, disentangle the dependency, but moving the global codec data into qtextcodec.*. Change-Id: Id7498423c7c4f9f42fd00c450947305d2af8c4be Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
parent
940665eff5
commit
1cab047d08
@ -43,7 +43,6 @@
|
|||||||
#include "qutfcodec_p.h"
|
#include "qutfcodec_p.h"
|
||||||
#include "qlatincodec_p.h"
|
#include "qlatincodec_p.h"
|
||||||
#include "qsimplecodec_p.h"
|
#include "qsimplecodec_p.h"
|
||||||
#include "private/qcoreglobaldata_p.h"
|
|
||||||
#include "qdebug.h"
|
#include "qdebug.h"
|
||||||
|
|
||||||
#include "unicode/ucnv.h"
|
#include "unicode/ucnv.h"
|
||||||
@ -436,7 +435,7 @@ QList<int> QIcuCodec::availableMibs()
|
|||||||
|
|
||||||
QTextCodec *QIcuCodec::defaultCodecUnlocked()
|
QTextCodec *QIcuCodec::defaultCodecUnlocked()
|
||||||
{
|
{
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (!globalData)
|
if (!globalData)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
QTextCodec *c = globalData->codecForLocale.loadAcquire();
|
QTextCodec *c = globalData->codecForLocale.loadAcquire();
|
||||||
@ -491,7 +490,7 @@ QTextCodec *QIcuCodec::codecForNameUnlocked(const char *name)
|
|||||||
standardName = "windows-949";
|
standardName = "windows-949";
|
||||||
}
|
}
|
||||||
|
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
QTextCodecCache *cache = &globalData->codecCache;
|
QTextCodecCache *cache = &globalData->codecCache;
|
||||||
|
|
||||||
QTextCodec *codec;
|
QTextCodec *codec;
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
#if !defined(QT_BOOTSTRAPPED)
|
#if !defined(QT_BOOTSTRAPPED)
|
||||||
#include <private/qcoreapplication_p.h>
|
#include <private/qcoreapplication_p.h>
|
||||||
#endif
|
#endif
|
||||||
#include "private/qcoreglobaldata_p.h"
|
|
||||||
|
|
||||||
#include "qutfcodec_p.h"
|
#include "qutfcodec_p.h"
|
||||||
#include "qlatincodec_p.h"
|
#include "qlatincodec_p.h"
|
||||||
@ -103,6 +102,28 @@ typedef QList<QByteArray>::ConstIterator ByteArrayListConstIt;
|
|||||||
|
|
||||||
Q_GLOBAL_STATIC(QRecursiveMutex, textCodecsMutex);
|
Q_GLOBAL_STATIC(QRecursiveMutex, textCodecsMutex);
|
||||||
|
|
||||||
|
Q_GLOBAL_STATIC(QTextCodecData, textCodecData)
|
||||||
|
|
||||||
|
QTextCodecData::QTextCodecData()
|
||||||
|
: codecForLocale(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextCodecData::~QTextCodecData()
|
||||||
|
{
|
||||||
|
codecForLocale = nullptr;
|
||||||
|
QList<QTextCodec *> tmp = allCodecs;
|
||||||
|
allCodecs.clear();
|
||||||
|
codecCache.clear();
|
||||||
|
for (QList<QTextCodec *>::const_iterator it = tmp.constBegin(); it != tmp.constEnd(); ++it)
|
||||||
|
delete *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextCodecData *QTextCodecData::instance()
|
||||||
|
{
|
||||||
|
return textCodecData();
|
||||||
|
}
|
||||||
|
|
||||||
class TextCodecsMutexLocker
|
class TextCodecsMutexLocker
|
||||||
{
|
{
|
||||||
using Lock = decltype(qt_unique_lock(std::declval<QRecursiveMutex&>()));
|
using Lock = decltype(qt_unique_lock(std::declval<QRecursiveMutex&>()));
|
||||||
@ -166,7 +187,7 @@ static void setup();
|
|||||||
// setCodecForLocale(0) is called at the same time.
|
// setCodecForLocale(0) is called at the same time.
|
||||||
static QTextCodec *setupLocaleMapper()
|
static QTextCodec *setupLocaleMapper()
|
||||||
{
|
{
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
|
|
||||||
QTextCodec *locale = nullptr;
|
QTextCodec *locale = nullptr;
|
||||||
|
|
||||||
@ -477,7 +498,7 @@ QTextCodec::QTextCodec()
|
|||||||
{
|
{
|
||||||
const TextCodecsMutexLocker locker;
|
const TextCodecsMutexLocker locker;
|
||||||
|
|
||||||
QCoreGlobalData *globalInstance = QCoreGlobalData::instance();
|
QTextCodecData *globalInstance = QTextCodecData::instance();
|
||||||
if (globalInstance->allCodecs.isEmpty())
|
if (globalInstance->allCodecs.isEmpty())
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@ -493,7 +514,7 @@ QTextCodec::QTextCodec()
|
|||||||
*/
|
*/
|
||||||
QTextCodec::~QTextCodec()
|
QTextCodec::~QTextCodec()
|
||||||
{
|
{
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (!globalData)
|
if (!globalData)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -534,7 +555,7 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
|
|||||||
|
|
||||||
const TextCodecsMutexLocker locker;
|
const TextCodecsMutexLocker locker;
|
||||||
|
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (!globalData)
|
if (!globalData)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
setup();
|
setup();
|
||||||
@ -578,7 +599,7 @@ QTextCodec* QTextCodec::codecForMib(int mib)
|
|||||||
{
|
{
|
||||||
const TextCodecsMutexLocker locker;
|
const TextCodecsMutexLocker locker;
|
||||||
|
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (!globalData)
|
if (!globalData)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
if (globalData->allCodecs.isEmpty())
|
if (globalData->allCodecs.isEmpty())
|
||||||
@ -624,7 +645,7 @@ QList<QByteArray> QTextCodec::availableCodecs()
|
|||||||
{
|
{
|
||||||
const TextCodecsMutexLocker locker;
|
const TextCodecsMutexLocker locker;
|
||||||
|
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (globalData->allCodecs.isEmpty())
|
if (globalData->allCodecs.isEmpty())
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@ -656,7 +677,7 @@ QList<int> QTextCodec::availableMibs()
|
|||||||
#else
|
#else
|
||||||
const TextCodecsMutexLocker locker;
|
const TextCodecsMutexLocker locker;
|
||||||
|
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (globalData->allCodecs.isEmpty())
|
if (globalData->allCodecs.isEmpty())
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@ -683,7 +704,7 @@ QList<int> QTextCodec::availableMibs()
|
|||||||
*/
|
*/
|
||||||
void QTextCodec::setCodecForLocale(QTextCodec *c)
|
void QTextCodec::setCodecForLocale(QTextCodec *c)
|
||||||
{
|
{
|
||||||
QCoreGlobalData::instance()->codecForLocale.storeRelease(c);
|
QTextCodecData::instance()->codecForLocale.storeRelease(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -697,7 +718,7 @@ void QTextCodec::setCodecForLocale(QTextCodec *c)
|
|||||||
|
|
||||||
QTextCodec* QTextCodec::codecForLocale()
|
QTextCodec* QTextCodec::codecForLocale()
|
||||||
{
|
{
|
||||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
QTextCodecData *globalData = QTextCodecData::instance();
|
||||||
if (!globalData)
|
if (!globalData)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ protected:
|
|||||||
virtual ~QTextCodec();
|
virtual ~QTextCodec();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend struct QCoreGlobalData;
|
friend struct QTextCodecData;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Q_CORE_EXPORT QTextEncoder {
|
class Q_CORE_EXPORT QTextEncoder {
|
||||||
|
@ -53,19 +53,35 @@
|
|||||||
|
|
||||||
#include <QtCore/private/qglobal_p.h>
|
#include <QtCore/private/qglobal_p.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <qhash.h>
|
||||||
|
#if QT_CONFIG(textcodec)
|
||||||
|
#include "qtextcodec.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
#if QT_CONFIG(textcodec)
|
#if QT_CONFIG(textcodec)
|
||||||
|
|
||||||
#include "qtextcodec.h"
|
|
||||||
|
|
||||||
#if defined(Q_OS_MAC) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX) || defined(Q_OS_WASM)
|
#if defined(Q_OS_MAC) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX) || defined(Q_OS_WASM)
|
||||||
#define QT_LOCALE_IS_UTF8
|
#define QT_LOCALE_IS_UTF8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*QTextCodecStateFreeFunction)(QTextCodec::ConverterState*);
|
typedef void (*QTextCodecStateFreeFunction)(QTextCodec::ConverterState*);
|
||||||
|
|
||||||
|
typedef QHash<QByteArray, QTextCodec *> QTextCodecCache;
|
||||||
|
|
||||||
|
struct QTextCodecData
|
||||||
|
{
|
||||||
|
QTextCodecData();
|
||||||
|
~QTextCodecData();
|
||||||
|
|
||||||
|
QList<QTextCodec*> allCodecs;
|
||||||
|
QAtomicPointer<QTextCodec> codecForLocale;
|
||||||
|
QTextCodecCache codecCache;
|
||||||
|
|
||||||
|
static QTextCodecData *instance();
|
||||||
|
};
|
||||||
|
|
||||||
bool qTextCodecNameMatch(const char *a, const char *b);
|
bool qTextCodecNameMatch(const char *a, const char *b);
|
||||||
|
|
||||||
#else // without textcodec:
|
#else // without textcodec:
|
||||||
|
@ -38,31 +38,17 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qcoreglobaldata_p.h"
|
#include "qcoreglobaldata_p.h"
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
#include "qtextcodec.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QCoreGlobalData, globalInstance)
|
Q_GLOBAL_STATIC(QCoreGlobalData, globalInstance)
|
||||||
|
|
||||||
QCoreGlobalData::QCoreGlobalData()
|
QCoreGlobalData::QCoreGlobalData()
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
: codecForLocale(nullptr)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QCoreGlobalData::~QCoreGlobalData()
|
QCoreGlobalData::~QCoreGlobalData()
|
||||||
{
|
{
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
codecForLocale = nullptr;
|
|
||||||
QList<QTextCodec *> tmp = allCodecs;
|
|
||||||
allCodecs.clear();
|
|
||||||
codecCache.clear();
|
|
||||||
for (QList<QTextCodec *>::const_iterator it = tmp.constBegin(); it != tmp.constEnd(); ++it)
|
|
||||||
delete *it;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QCoreGlobalData *QCoreGlobalData::instance()
|
QCoreGlobalData *QCoreGlobalData::instance()
|
||||||
|
@ -57,15 +57,10 @@
|
|||||||
#include "QtCore/qreadwritelock.h"
|
#include "QtCore/qreadwritelock.h"
|
||||||
#include "QtCore/qhash.h"
|
#include "QtCore/qhash.h"
|
||||||
#include "QtCore/qbytearray.h"
|
#include "QtCore/qbytearray.h"
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
#include "QtCore/qtextcodec.h"
|
|
||||||
#endif
|
|
||||||
#include "QtCore/qmutex.h"
|
#include "QtCore/qmutex.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
typedef QHash<QByteArray, QTextCodec *> QTextCodecCache;
|
|
||||||
|
|
||||||
struct QCoreGlobalData {
|
struct QCoreGlobalData {
|
||||||
QCoreGlobalData();
|
QCoreGlobalData();
|
||||||
~QCoreGlobalData();
|
~QCoreGlobalData();
|
||||||
@ -73,12 +68,6 @@ struct QCoreGlobalData {
|
|||||||
QMap<QString, QStringList> dirSearchPaths;
|
QMap<QString, QStringList> dirSearchPaths;
|
||||||
QReadWriteLock dirSearchPathsLock;
|
QReadWriteLock dirSearchPathsLock;
|
||||||
|
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
QList<QTextCodec*> allCodecs;
|
|
||||||
QAtomicPointer<QTextCodec> codecForLocale;
|
|
||||||
QTextCodecCache codecCache;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static QCoreGlobalData *instance();
|
static QCoreGlobalData *instance();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user