33 #include <QApplication> 34 #include <QMetaObject> 903 static char __klf_version_string[] = KLF_VERSION_STRING;
908 return __klf_version_string;
913 return KLF_VERSION_MAJ;
917 return KLF_VERSION_MIN;
921 return KLF_VERSION_REL;
929 class KLFDebugObjectWatcherPrivate
940 if (instance == NULL)
947 p->refInfos[(quintptr)
object] = refinfo;
950 KLFDebugObjectWatcher::KLFDebugObjectWatcher()
953 p =
new KLFDebugObjectWatcherPrivate;
955 KLFDebugObjectWatcher::~KLFDebugObjectWatcher()
961 quintptr obji = (quintptr)
object;
962 if (p->refInfos.contains(obji)) {
963 klfDbg(
klfFmtCC(
"Object destroyed: (%s*)%p; object reference name is `%s'",
965 (
void*)object, qPrintable(p->refInfos[obji])));
979 iParen = funcname.
indexOf(
'(');
982 if (iParen == -1 || iSpc > iParen) {
983 qWarning(
"klfShortFuncSignature('%s'): Signature parse error!", funcname.
constData());
990 return funcname.
mid(iSpc+1);
1000 static const int bufferSize = 8192;
1001 char buffer[bufferSize];
1003 #if defined(_BSD_SOURCE) || _XOPEN_SOURCE >= 500 || defined(_ISOC99_SOURCE) 1005 len = vsnprintf(buffer, bufferSize, fmt, pp);
1006 if (len >= bufferSize) {
1008 qWarning(
"%s(): output from format string \"%s\" was truncated from %d to %d bytes.",
1013 len = vsprintf(buffer, fmt, pp);
1017 qWarning(
"%s(): vs(n)printf() failed for format \"%s\"",
KLF_FUNC_NAME, fmt);
1052 gettimeofday(&tv, NULL);
1055 sprintf(temp,
"%03ld.%06ld", (ulong)tv.tv_sec % 1000, (ulong)tv.tv_usec);
1057 sprintf(temp,
"%ld.%06ld", (ulong)tv.tv_sec, (ulong)tv.tv_usec);
1063 static int __klf_dbg_block_depth_counter = 0;
1067 : pBlockName(blockName), pPrintMsg(true)
1074 qDebug(
"%s: [%02d]block begin", qPrintable(
pBlockName), ++__klf_dbg_block_depth_counter);
1083 qDebug(
"%s: [%02d]block begin", qPrintable(
pBlockName), ++__klf_dbg_block_depth_counter);
1091 qDebug(
"%s: [%02d]block end", qPrintable(
pBlockName), __klf_dbg_block_depth_counter--);
1122 if (shorttime == NULL)
1132 Q_UNUSED(shorttime) ;
1149 QStringList() <<
"a" <<
"alpha" <<
"b" <<
"beta" <<
"p" <<
"pre" <<
"preview" <<
"RC" <<
"rc" 1151 <<
"post" <<
"dev" <<
"devel";
1153 static int __klf_version_compare_suffix_words(
QString w1,
QString w2)
1158 int borderBeforeAfter = words.
indexOf(
"");
1159 if (borderBeforeAfter < 0)
1160 qWarning(
"klfVersionCompare: suffix words list doesn't contain \"\"!");
1163 if (i1 == -1 && i2 == -1)
1166 return i1 < borderBeforeAfter ? -1 : +1;
1168 return i2 < borderBeforeAfter ? +1 : -1;
1173 #define VERSION_RX "^(\\d+)(\\.(\\d+)(\\.(\\d+)([a-zA-Z]+\\d*)?)?)?$" 1183 qDebug(
"klfVersionCompare(): Comparing versions %s and %s", qPrintable(v1), qPrintable(v2));
1194 qWarning(
"klfVersionLessThan: Invalid version number format: %s", qPrintable(v1));
1198 qWarning(
"klfVersionLessThan: Invalid version number format: %s", qPrintable(v2));
1207 if ( ! hasmin1 && ! hasmin2 )
1209 if ( ! hasmin1 && hasmin2 )
1211 if ( hasmin1 && ! hasmin2 )
1220 if ( ! hasrel1 && ! hasrel2 )
1222 if ( ! hasrel1 && hasrel2 )
1224 if ( hasrel1 && ! hasrel2 )
1236 if (suffix1 == suffix2)
1240 QRegExp rxs1(
"^([a-zA-Z]*)(\\d*)$");
1250 int cmp = __klf_version_compare_suffix_words(w1, w2);
1265 int n1 = ns1.
toInt();
1266 int n2 = ns2.
toInt();
KLF_EXPORT QByteArray klfShortFuncSignature(const QByteArray &funcname)
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
QString cap(int nth) const
KLF_EXPORT QByteArray klfFmtDouble(double num, char fmt, int precision)
KLF_EXPORT int klfVersionMaj()
KLF_EXPORT QDebug __klf_dbg_hdr(QDebug dbg, const char *funcname, const char *refinstance, const char *shorttime)
void debugObjectDestroyed(QObject *object)
int lastIndexOf(char ch, int from) const
Base declarations for klatexformula and some utilities.
KLF_EXPORT QByteArray klfFmt(const char *fmt, va_list pp)
bool startsWith(const QByteArray &ba) const
#define klfDbg(streamableItems)
print debug stream items
KLF_EXPORT int klfVersionMin()
void registerObjectRefInfo(QObject *object, const QString &refInfo)
KLF_EXPORT QDebug __klf_warning_hdr(QDebug warndbg, const char *funcname, const char *shorttime)
KLF_EXPORT int klfVersionCompare(const QString &v1, const QString &v2)
Compares two version strings.
int indexOf(char ch, int from) const
QString number(int n, int base)
int toInt(bool *ok, int base) const
const char * constData() const
QByteArray mid(int pos, int len) const
KLF_EXPORT QString klfTimeOfDay(bool shortfmt)
QDateTime currentDateTime()
QByteArray toLatin1() const
KLF_EXPORT int klfVersionRelease()
Utility to time the execution of a block.
KLFDebugBlockTimer(const QString &blockName)
KLF_EXPORT const char * klfVersion()
virtual ~KLFDebugBlockTimer()
QString func_name_w_parens(const char *f)
QStringList klf_version_suffixes
QString fromLatin1(const char *str, int size)
int indexOf(const QRegExp &rx, int from) const
KLF_EXPORT bool klfIsValidVersion(const QString &v)
static KLFDebugObjectWatcher * getWatcher()
int compare(const QString &other, Qt::CaseSensitivity cs) const
bool exactMatch(const QString &str) const
KLFDebugBlock(const QString &blockName)
KLF_EXPORT bool klfVersionCompareLessThan(const QString &v1, const QString &v2)
Same as klfVersionCompare(v1,v2) < 0