From 5899f8f8e1a72f4ff4b6b4bb02effd08fad33eca Mon Sep 17 00:00:00 2001 From: Reto Zingg Date: Sat, 15 Dec 2012 19:28:49 +0200 Subject: [PATCH] adapt sharedkvtmlfiles.h for querymee --- sharedkvtmlfiles.h | 84 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 7 deletions(-) diff --git a/sharedkvtmlfiles.h b/sharedkvtmlfiles.h index 7fe1de4..ac09807 100644 --- a/sharedkvtmlfiles.h +++ b/sharedkvtmlfiles.h @@ -1,7 +1,14 @@ +/*************************************************************************** +* this file is from kdeedu project. Filename: sharedkvtmlfiles.h +***************************************************************************/ + /*************************************************************************** scan a group of KVTML documents to get information from them ----------------------------------------------------------------------- copyright : (C) 2007 Jeremy Whiting + + Copyright 2010, 2012 Reto Zingg + ***************************************************************************/ /*************************************************************************** @@ -16,10 +23,73 @@ #ifndef SHAREDKVTMLFILES_H #define SHAREDKVTMLFILES_H -#include "libkeduvocdocument_export.h" +#include "libqmvocdocument_export.h" #include +typedef void (*KdeCleanUpFunction)(); + +class KCleanUpGlobalStatic +{ + public: + KdeCleanUpFunction func; + + inline ~KCleanUpGlobalStatic() { func(); } +}; + + +#ifdef Q_CC_MSVC +# define K_GLOBAL_STATIC_STRUCT_NAME(NAME) _k_##NAME##__LINE__ +#else +# define K_GLOBAL_STATIC_STRUCT_NAME(NAME) +#endif + +#define K_GLOBAL_STATIC(TYPE, NAME) K_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ()) + +#define K_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ +static QBasicAtomicPointer _k_static_##NAME = Q_BASIC_ATOMIC_INITIALIZER(0); \ +static bool _k_static_##NAME##_destroyed; \ +static struct K_GLOBAL_STATIC_STRUCT_NAME(NAME) \ +{ \ + bool isDestroyed() \ + { \ + return _k_static_##NAME##_destroyed; \ + } \ + inline operator TYPE*() \ + { \ + return operator->(); \ + } \ + inline TYPE *operator->() \ + { \ + if (!_k_static_##NAME) { \ + if (isDestroyed()) { \ + qFatal("Fatal Error: Accessed global static '%s *%s()' after destruction. " \ + "Defined at %s:%d", #TYPE, #NAME, __FILE__, __LINE__); \ + } \ + TYPE *x = new TYPE ARGS; \ + if (!_k_static_##NAME.testAndSetOrdered(0, x) \ + && _k_static_##NAME != x ) { \ + delete x; \ + } else { \ + static KCleanUpGlobalStatic cleanUpObject = { destroy }; \ + } \ + } \ + return _k_static_##NAME; \ + } \ + inline TYPE &operator*() \ + { \ + return *operator->(); \ + } \ + static void destroy() \ + { \ + _k_static_##NAME##_destroyed = true; \ + TYPE *x = _k_static_##NAME; \ + _k_static_##NAME = 0; \ + delete x; \ + } \ +} NAME; + + /** *namespace and singleton class to scan groups of kvtml files *from shared kvtml location, and give information @@ -29,31 +99,31 @@ namespace SharedKvtmlFiles { /** get list of all languages found in any files */ - KEDUVOCDOCUMENT_EXPORT QStringList languages(); + QMVOCDOCUMENT_EXPORT QStringList languages(); /** get list of filenames found of given language *@param language language requested QString() for all languages *@return a list of filenames with words in language */ - KEDUVOCDOCUMENT_EXPORT QStringList fileNames( const QString &language = QString() ); + QMVOCDOCUMENT_EXPORT QStringList fileNames( const QString &language = QString() ); /** get the list of document titles found of a given language *@param language requested language QString() for all titles *@return a list of document titles with words in language */ - KEDUVOCDOCUMENT_EXPORT QStringList titles( const QString &language = QString() ); + QMVOCDOCUMENT_EXPORT QStringList titles( const QString &language = QString() ); /** get the list of document remarks found of a given language *@param language requested language QString() for all comments *@return a list of document remarks with words in language */ - KEDUVOCDOCUMENT_EXPORT QStringList comments( const QString &language = QString() ); + QMVOCDOCUMENT_EXPORT QStringList comments( const QString &language = QString() ); /** rescan the shared kvtml locations */ - KEDUVOCDOCUMENT_EXPORT void rescan(); + QMVOCDOCUMENT_EXPORT void rescan(); /** sort files downloaded to kvtml top-level dir into locale sub-folders */ - KEDUVOCDOCUMENT_EXPORT void sortDownloadedFiles(); + QMVOCDOCUMENT_EXPORT void sortDownloadedFiles(); } #endif -- 2.47.3