[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: [optimization] QStringTemp for Qt 4
From: "Fred P." <fprog26 () hotmail ! com>
Date: 2005-03-26 2:41:37
Message-ID: BAY104-F28427E6356283A2D31318FA7420 () phx ! gbl
[Download RAW message or body]
Hi everyone,
Those remembering this proposal and it's issue due to Binary
incompatibility.
http://kde-apps.org/content/show.php?content=12191
Well, I tried the same with Qt 4:
http://distfiles.gentoo.org/distfiles/qt-x11-opensource-4.0.0-b2-snapshot-20050302.tar.bz2
After compiling it on RedHat Linux, like this:
# g++ -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_SHARED -DQT_BUILD_GUI_LIB
-DQT_NO_CAST_TO_ASCII -DQT3_SUPPORT_WARNINGS -DQT_MOC_COMPAT
-DQT_RASTER_IMAGEENGINE -DQT_HAVE_FREETYPE -DQT_NO_DEBUG -DQT_CORE_LIB
-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE
-I/root/q/qt-x11-opensource-4.0.0-b2-snapshot-20050302/mkspecs/linux-g++ -I.
-I/root/q/qt-x11-opensource-4.0.0-b2-snapshot-20050302/include
-L/root/q/qt-x11-opensource-4.0.0-b2-snapshot-20050302/lib -I../global
-I../codecs -I../thread -I../kernel -I../io -I
/root/q/qt-x11-opensource-4.0.0-b2-snapshot-20050302/include/Qt -I
/root/q/qt-x11-opensource-4.0.0-b2-snapshot-20050302/include/QtCore/
-lQtCore qstringtemp_test.cpp -o qstringtemp.x
# ./qstringtemp.x
The algorithm should be tweaked using benchmarks.
On average it is from 10% to 2x to 10x faster, depending on buffer size
usage.
Here's the two file needed:
#ifndef __QStringTemp_H__
#define __QStringTemp_H__
#include "qstring.h"
inline uint QStringTempSize( register uint newLen )
{
register uint newMax = 4;
while ( newMax < newLen )
{
newMax *= 2;
}
register uint sz = ( newMax + newLen ) / 2;
#define QStringTempShift 0
newMax = ( ((sz) + (sz) >> (QStringTempShift)) | 16 );
return newMax;
}
class Q_CORE_EXPORT QStringTemp : public QString
{
public:
inline QStringTemp( register size_t sz = 0)
// : QString( (int)( QStringTempSize( sz ) ), (QChar)('\0') )
: QString()
{
QString::reserve( (int)( QStringTempSize(sz) ) );
}
inline ~QStringTemp()
{
}
public:
Q_CORE_EXPORT inline QStringTemp& operator+( const QString &s2 )
{
QString::operator+=( s2 );
return *this;
}
Q_CORE_EXPORT inline QStringTemp& operator+( const char *s2 )
{
QString::operator+=( QString::fromLatin1(s2) );
return *this;
}
Q_CORE_EXPORT inline QStringTemp& operator+( QChar c2 )
{
QString::operator+=( c2 );
return *this;
}
Q_CORE_EXPORT inline QStringTemp& operator+( char c2 )
{
QString::operator+=( c2 );
return *this;
}
};
#endif
#ifndef __QStringTemp_Test_CPP__
#define __QStringTemp_Test_CPP__
#include <stdio.h>
#include "qstring.h"
#include "qstringtemp.h"
#ifndef _WIN32
#define _tzset()
#define _strtime( arg )
#endif
// This text is used for testing purposes, it could be anything...
#define SOMETEXT \
"************************************************************************************* \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
******************************************************************************************************************************
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************** \
************************************************************************************************************************************************************"
#include <time.h>
QString test1();
QString test2();
QString test3();
QString test4();
QString test5();
QString test6();
QString test7();
QString test8();
QString test9();
QString test10();
QString test1b();
QString test2b();
QString test3b();
QString test4b();
QString test5b();
QString test6b();
QString test7b();
QString test8b();
QString test9b();
QString test10b();
#define MAX 60000
#define MAX2 30000
#define MAX3 16000
#define MAX4 12000
#define MAX5 8000
int main( int argc, char* argv[] )
{
register int i;
char tstart[ 128];
char tfinish[128];
clock_t start, finish, diff1, diff2;
double duration;
memset( tstart, 0, 128 );
memset( tfinish, 0, 128 );
/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n1. With QStringTemp: %d - %d bytes", MAX, 21 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX; i++ )
test1();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n2. Without QStringTemp: %d - %d bytes", MAX, 21 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX; i++ )
test2();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n3. With QStringTemp : %d", MAX2 );
printf( " - %d bytes", 1572*4 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX2; i++ )
test3();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n4. Without QStringTemp : %d", MAX2 );
printf( " - %d bytes", 1572*4 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX2; i++ )
test4();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n5. With QStringTemp : %d", MAX3 );
printf( " - %d bytes", 1572*6 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX3; i++ )
test5();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n6. Without QStringTemp : %d", MAX3 );
printf( " - %d bytes", 1572*6 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX3; i++ )
test6();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n7. With QStringTemp : %d", MAX4 );
printf( " - %d bytes", 1572*8 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX4; i++ )
test7();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n8. Without QStringTemp : %d", MAX4 );
printf( " - %d bytes", 1572*8 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX4; i++ )
test8();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n9. With QStringTemp : %d", MAX5 );
printf( " - %d bytes", 1572*16 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX5; i++ )
test9();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n10. Without QStringTemp : %d", MAX5 );
printf( " - %d bytes", 1572*16 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX5; i++ )
test10();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
printf( "\nWITHOUT KNOWING QStringTemp buffer size in advance\n" );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n3. With QStringTemp : %d", MAX2 );
printf( " - %d bytes", 1572*4 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX2; i++ )
test3b();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n4. Without QStringTemp : %d", MAX2 );
printf( " - %d bytes", 1572*4 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX2; i++ )
test4b();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n5. With QStringTemp : %d", MAX3 );
printf( " - %d bytes", 1572*6 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX3; i++ )
test5b();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n6. Without QStringTemp : %d", MAX3 );
printf( " - %d bytes", 1572*6 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX3; i++ )
test6b();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n7. With QStringTemp : %d", MAX4 );
printf( " - %d bytes", 1572*8 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX4; i++ )
test7b();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n8. Without QStringTemp : %d", MAX4 );
printf( " - %d bytes", 1572*8 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX4; i++ )
test8b();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n9. With QStringTemp : %d", MAX5 );
printf( " - %d bytes", 1572*16 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX5; i++ )
test9b();
finish = clock();
_strtime( tfinish );
diff1 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d \n", duration, start, finish,
(finish - start) );
/////////////////////////////////////////////////////
/* Display operating system-style date and time. */
_strtime( tstart );
printf( "\n10. Without QStringTemp : %d", MAX5 );
printf( " - %d bytes", 1572*16 );
printf( "\t OS time:\t%s", tstart );
start = clock();
for( i = 0; i < MAX5; i++ )
test10b();
finish = clock();
_strtime( tfinish );
diff2 = (finish - start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "\t%s\n", tfinish );
printf( "%2.6f seconds: %d -> %d = %d :", duration, start, finish,
(finish - start) );
if ( diff1 < diff2 )
{
printf( "PASSED. %d\n", (diff1 - diff2) );
}
else
{
printf( "FAILED. %d\n", (diff1 - diff2) );
}
/////////////////////////////////////////////////////
printf( "\n" );
return 0;
}
QString test1()
{
//printf( "With QStringTemp\n" );
// 22 bytes
QString a = "Alpha";
QString b = "Beta";
QString c = "Calling";
QString d = "Delta";
QStringTemp tmp;
QString s = tmp + a + b + c + d;
//printf( "%c", s.data()[0] );
return s;
}
QString test2()
{
//printf( "No QStringTemp\n" );
QString a = "Alpha";
QString b = "Beta";
QString c = "Calling";
QString d = "Delta";
QString s = a + b + c + d;
return s;
//printf( "%c", s.data()[0] );
}
QString test3()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QStringTemp tmp(6300);
QString s = tmp + a + b + c + d;
return s;
}
QString test4()
{
//printf( "No QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString s = a + b + c + d;
return s;
}
QString test5()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QStringTemp tmp(1572*6); // 9.4K
QString s = tmp + a + b + c + d + e + f;
return s;
}
QString test6()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString s = a + b + c + d + e + f;
return s;
}
QString test7()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QStringTemp tmp(1572*8); // 12K
QString s = tmp + a + b + c + d + e + f + g + h;
return s;
}
QString test8()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QString s = a + b + c + d + e + f + g + h;
return s;
}
QString test9()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QStringTemp tmp(1572*16); // 25K
QString s = tmp + a + b + c + d + e + f + g + h + a + b + c + d + e + f +
g + h;
return s;
}
QString test10()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QString s = a + b + c + d + e + f + g + h + a + b + c + d + e + f + g +
h;
return s;
}
QString test3b()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QStringTemp tmp; //(6300);
QString s = tmp + a + b + c + d;
return s;
}
QString test4b()
{
//printf( "No QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString s = a + b + c + d;
return s;
}
QString test5b()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QStringTemp tmp; //(1572*6); // 9.4K
QString s = tmp + a + b + c + d + e + f;
return s;
}
QString test6b()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString s = a + b + c + d + e + f;
return s;
}
QString test7b()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QStringTemp tmp; //(1572*8); // 12K
QString s = tmp + a + b + c + d + e + f + g + h;
return s;
}
QString test8b()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QString s = a + b + c + d + e + f + g + h;
return s;
}
QString test9b()
{
//printf( "With QStringTemp\n" );
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QStringTemp tmp; //(1572*16); // 25K
QString s = tmp + a + b + c + d + e + f + g + h + a + b + c + d + e + f +
g + h;
return s;
}
QString test10b()
{
// 1572..
QString a = "A" SOMETEXT ;
QString b = "B" SOMETEXT ;
QString c = "C" SOMETEXT ;
QString d = "D" SOMETEXT ;
QString e = "E" SOMETEXT ;
QString f = "F" SOMETEXT ;
QString g = "G" SOMETEXT ;
QString h = "H" SOMETEXT ;
QString s = a + b + c + d + e + f + g + h + a + b + c + d + e + f + g + h;
return s;
}
#endif
> > Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic