2012-05-11 01:45 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/hbqt/hbmk2_qt.hb
    + Applied: concept forwarded by Francessco a few days back,
      where class creation and registration has been separated.
      This reduces a lot of object creation and destruction.
      It also increases the speed, you can experience in hbIDE.
      Not confirmed, but have also noticed that memory consumption 
      has also been optimized.
This commit is contained in:
Pritpal Bedi
2012-05-11 08:50:23 +00:00
parent 690ce3b29d
commit 01ab293254
2 changed files with 52 additions and 13 deletions

View File

@@ -16,6 +16,15 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-05-11 01:45 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbqt/hbmk2_qt.hb
+ Applied: concept forwarded by Francessco a few days back,
where class creation and registration has been separated.
This reduces a lot of object creation and destruction.
It also increases the speed, you can experience in hbIDE.
Not confirmed, but have also noticed that memory consumption
has also been optimized.
2012-05-09 16:04 UTC+0200 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp

View File

@@ -1407,10 +1407,6 @@ METHOD HbQtSource:build()
FOR EACH s IN ::hRef
AAdd( aLine, "extern HB_EXPORT void * hbqt_gcAllocate_" + s:__enumKey() + "( void * pObj, bool bNew );" )
NEXT
IF ::cQtVer > "0x040500"
AAdd( aLine, "#endif" )
ENDIF
AAdd( aLine, "" )
n := AScan( ::cls_, {| e_ | Left( Lower( e_[ 1 ] ), 7 ) == "inherit" .and. ! Empty( e_[ 2 ] ) } )
IF n > 0
@@ -1418,6 +1414,26 @@ METHOD HbQtSource:build()
ELSE
s := "HBQTOBJECTHANDLER"
ENDIF
AAdd( aLine, "" )
AAdd( aLine, "extern HB_EXPORT void hbqt_register_" + lower( uQtObject ) + "();" )
AAdd( aLine, "" )
FOR EACH k IN hb_aTokens( s, "," )
k := lower( AllTrim( k ) )
IF k == "hbqtobjecthandler"
AAdd( aLine, "HB_FUNC_EXTERN( " + Upper( k ) + " );" )
ELSE
AAdd( aLine, "extern HB_EXPORT void hbqt_register_" + substr( k,4 ) + "();" )
ENDIF
NEXT
AAdd( aLine, "" )
IF ::cQtVer > "0x040500"
AAdd( aLine, "#endif" )
ENDIF
AAdd( aLine, "" )
FOR EACH k IN hb_aTokens( s, "," )
AAdd( aLine, "HB_FUNC_EXTERN( " + Upper( AllTrim( k ) ) + " );" )
NEXT
@@ -1635,19 +1651,25 @@ METHOD HbQtSource:build()
AAdd( aLine, "#endif" )
ENDIF
AAdd( aLine, "" )
/* Internal class instantiation. TODO: Rename to __QCLASS */
AAdd( aLine, "HB_FUNC( HB_" + uQtObject + " )" )
AAdd( aLine, 'static PHB_ITEM s_oClass = NULL;' )
AAdd( aLine, "" )
AAdd( aLine, 'void hbqt_register_' + lower( uQtObject ) + '()' )
AAdd( aLine, "{" )
AAdd( aLine, " static PHB_ITEM s_oClass = NULL;" )
AAdd( aLine, ' HB_TRACE( HB_TR_DEBUG, ( "HB_' + uQtObject +'" ) );' )
AAdd( aLine, ' HB_TRACE( HB_TR_DEBUG, ( "hbqt_register_' + lower( uQtObject ) + '()" ) );' )
AAdd( aLine, " HB_HBQT_LOCK" )
AAdd( aLine, " if( s_oClass == NULL )" )
AAdd( aLine, " {" )
AAdd( aLine, " s_oClass = hb_itemNew( NULL );" )
AAdd( aLine, " hbqt_addDeleteList( s_oClass );" )
FOR EACH k IN hb_aTokens( s, "," )
AAdd( aLine, " HB_FUNC_EXEC( " + Upper( AllTrim( k ) ) + " );" )
k := lower( AllTrim( k ) )
IF k == "hbqtobjecthandler"
AAdd( aLine, " HB_FUNC_EXEC( " + Upper( k ) + " );" )
ELSE
AAdd( aLine, " hbqt_register_" + substr( k, 4 ) + "();" )
ENDIF
NEXT
AAdd( aLine, ' PHB_ITEM oClass = hbqt_defineClassBegin( "' + uQtObject + '", s_oClass, "' + s + '" );' )
AAdd( aLine, " if( oClass )" )
@@ -1655,13 +1677,21 @@ METHOD HbQtSource:build()
AAdd( aLine, " s_registerMethods( hb_objGetClass( hb_stackReturnItem() ) );" )
AAdd( aLine, " hbqt_defineClassEnd( s_oClass, oClass );" )
AAdd( aLine, " }" )
AAdd( aLine, " HB_HBQT_UNLOCK" )
AAdd( aLine, " return;" )
AAdd( aLine, " }" )
AAdd( aLine, " HB_HBQT_UNLOCK" )
AAdd( aLine, ' hb_objSendMsg( s_oClass, "INSTANCE", 0 );' )
AAdd( aLine, "}" )
AAdd( aLine, "" )
AAdd( aLine, "HB_FUNC( HB_" + uQtObject + " )" )
AAdd( aLine, "{" )
AAdd( aLine, ' HB_TRACE( HB_TR_DEBUG, ( "HB_' + uQtObject + '" ) );' )
AAdd( aLine, " if( s_oClass == NULL )" )
AAdd( aLine, " {" )
AAdd( aLine, " hbqt_register_" + lower( uQtObject ) + "();" )
AAdd( aLine, " }" )
AAdd( aLine, ' hb_objSendMsg( s_oClass, "INSTANCE", 0 );' )
AAdd( aLine, "}" )
AAdd( aLine, "" )
/* Build PRG level constructor */
AAdd( aLine, ::newW_[ 1 ] ) // Func definition