From 7caf68b601af66db99f6f4a2cc769ab9d8c277ef Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Thu, 27 Jan 2011 06:29:31 +0000 Subject: [PATCH] 2011-01-27 07:29 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/rdd/wacore.c % minor optimization * harbour/src/rdd/usrrdd/usrrdd.c + extended USRRDD_ID() to accept RDD name as parameter * harbour/src/rdd/usrrdd/rdds/arrayrdd.prg * harbour/src/rdd/usrrdd/rdds/logrdd.prg ! fixed to not use: ( AScan( RDDLIST( RDT_FULL ), "ARRAYRDD" ) - 1 ) to extract RDD ID. In theory it could work if RDDLIST( 0 ) is used instead of RDDLIST( RDT_FULL ) anyhow it's much more efficient to simply store RDD ID in static variable inside *_GETFUNCTABLE() function --- harbour/ChangeLog | 17 ++++++++ harbour/src/rdd/usrrdd/rdds/arrayrdd.prg | 24 ++++------- harbour/src/rdd/usrrdd/rdds/logrdd.prg | 54 ++++++------------------ harbour/src/rdd/usrrdd/usrrdd.c | 23 +++++++--- harbour/src/rdd/wacore.c | 7 +-- 5 files changed, 60 insertions(+), 65 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 074125a1a9..465936c985 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,23 @@ The license applies to all entries newer than 2009-04-28. */ +2011-01-27 07:29 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/src/rdd/wacore.c + % minor optimization + + * harbour/src/rdd/usrrdd/usrrdd.c + + extended USRRDD_ID() to accept RDD name as parameter + + * harbour/src/rdd/usrrdd/rdds/arrayrdd.prg + * harbour/src/rdd/usrrdd/rdds/logrdd.prg + ! fixed to not use: + ( AScan( RDDLIST( RDT_FULL ), "ARRAYRDD" ) - 1 ) + to extract RDD ID. + In theory it could work if RDDLIST( 0 ) is used instead + of RDDLIST( RDT_FULL ) anyhow it's much more efficient to + simply store RDD ID in static variable inside *_GETFUNCTABLE() + function + 2011-01-27 01:30 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbnetio/utils/netiosrv/netiosrv.prg * contrib/hbnetio/utils/netiosrv/netiocui.prg diff --git a/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg b/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg index f2c29c3ed8..d76bc003b3 100644 --- a/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg +++ b/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg @@ -98,6 +98,8 @@ ANNOUNCE ARRAYRDD #define RECDATA_DELETED 1 #define RECDATA_SIZEOF 1 +static s_nRddID := -1 + /* * non work area methods receive RDD ID as first parameter * Methods INIT and EXIT does not have to execute SUPER methods - these is @@ -944,6 +946,8 @@ FUNCTION ARRAYRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSu LOCAL cSuperRDD := NIL /* NO SUPER RDD */ LOCAL aMyFunc[ UR_METHODCOUNT ] + s_nRddID := nRddID + aMyFunc[ UR_INIT ] := ( @AR_INIT() ) aMyFunc[ UR_NEW ] := ( @AR_NEW() ) aMyFunc[ UR_FLUSH ] := ( @AR_DUMMY() ) @@ -988,17 +992,11 @@ INIT PROCEDURE ARRAYRDD_INIT() FUNCTION hb_EraseArrayRdd( cFullName ) LOCAL nReturn := HB_FAILURE LOCAL aDBFData, oError - LOCAL nRDD, aRDDList LOCAL hRDDData - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "ARRAYRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in AR_INIT() ? - TODO - - hRDDData := USRRDD_RDDDATA( nRDD ) + hRDDData := USRRDD_RDDDATA( s_nRddID ) IF hRDDData != NIL @@ -1080,17 +1078,11 @@ FUNCTION hb_EraseArrayRdd( cFullName ) FUNCTION hb_FileArrayRdd( cFullName ) LOCAL nReturn := HB_FAILURE LOCAL oError - LOCAL nRDD, aRDDList LOCAL hRDDData - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "ARRAYRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in AR_INIT() ? - TODO - - hRDDData := USRRDD_RDDDATA( nRDD ) + hRDDData := USRRDD_RDDDATA( s_nRddID ) IF hRDDData != NIL diff --git a/harbour/src/rdd/usrrdd/rdds/logrdd.prg b/harbour/src/rdd/usrrdd/rdds/logrdd.prg index 33ba225f0b..c5d3e9a9c6 100644 --- a/harbour/src/rdd/usrrdd/rdds/logrdd.prg +++ b/harbour/src/rdd/usrrdd/rdds/logrdd.prg @@ -75,6 +75,8 @@ ANNOUNCE LOGRDD DYNAMIC HB_LOGRDDINHERIT /* To be defined at user level */ +STATIC s_nRddID := -1 + STATIC FUNCTION LOGRDD_INIT( nRDD ) LOCAL lActive, cFileName, cTag, cRDDName @@ -186,6 +188,8 @@ FUNCTION LOGRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSupe LOCAL cSuperRDD := hb_LogRddInherit() /* We are inheriting from a User Defined RDD */ LOCAL aMyFunc[ UR_METHODCOUNT ] + s_nRddID := nRddID + aMyFunc[ UR_INIT ] := ( @LOGRDD_INIT() ) aMyFunc[ UR_EXIT ] := ( @LOGRDD_EXIT() ) aMyFunc[ UR_CREATE ] := ( @LOGRDD_CREATE() ) @@ -210,18 +214,12 @@ INIT PROCEDURE _LOGRDD_INIT() /* -------------------------------------------------- */ FUNCTION hb_LogRddLogFileName( cFileName ) - LOCAL nRDD, aRDDList LOCAL aRDDData LOCAL cOldFileName - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "LOGRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in UR_INIT() ? - TODO - - aRDDData := USRRDD_RDDDATA( nRDD ) + aRDDData := USRRDD_RDDDATA( s_nRddID ) cOldFileName := aRDDData[ ARRAY_FILENAME ] @@ -233,18 +231,12 @@ FUNCTION hb_LogRddLogFileName( cFileName ) RETURN cOldFileName FUNCTION hb_LogRddTag( cTag ) - LOCAL nRDD, aRDDList LOCAL aRDDData LOCAL cOldTag - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "LOGRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in UR_INIT() ? - TODO - - aRDDData := USRRDD_RDDDATA( nRDD ) + aRDDData := USRRDD_RDDDATA( s_nRddID ) cOldTag := aRDDData[ ARRAY_TAG ] @@ -256,18 +248,12 @@ FUNCTION hb_LogRddTag( cTag ) RETURN cOldTag FUNCTION hb_LogRddActive( lActive ) - LOCAL nRDD, aRDDList LOCAL aRDDData LOCAL lOldActive - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "LOGRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in UR_INIT() ? - TODO - - aRDDData := USRRDD_RDDDATA( nRDD ) + aRDDData := USRRDD_RDDDATA( s_nRddID ) lOldActive := aRDDData[ ARRAY_ACTIVE ] @@ -279,18 +265,12 @@ FUNCTION hb_LogRddActive( lActive ) RETURN lOldActive FUNCTION hb_LogRddMsgLogBlock( bMsgLogBlock ) - LOCAL nRDD, aRDDList LOCAL aRDDData LOCAL bOldMsgLogBlock - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "LOGRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in UR_INIT() ? - TODO - - aRDDData := USRRDD_RDDDATA( nRDD ) + aRDDData := USRRDD_RDDDATA( s_nRddID ) bOldMsgLogBlock := aRDDData[ ARRAY_MSGLOGBLOCK ] @@ -302,18 +282,12 @@ FUNCTION hb_LogRddMsgLogBlock( bMsgLogBlock ) RETURN bOldMsgLogBlock FUNCTION hb_LogRddUserLogBlock( bUserLogBlock ) - LOCAL nRDD, aRDDList LOCAL aRDDData LOCAL bOldUserLogBlock - aRDDList := RDDLIST( RDT_FULL ) - nRDD := AScan( aRDDList, "LOGRDD" ) + IF s_nRddID >= 0 - IF nRDD > 0 - - nRDD -- // HACK: Possibly an error of nRDD value in UR_INIT() ? - TODO - - aRDDData := USRRDD_RDDDATA( nRDD ) + aRDDData := USRRDD_RDDDATA( s_nRddID ) bOldUserLogBlock := aRDDData[ ARRAY_MSGLOGBLOCK ] diff --git a/harbour/src/rdd/usrrdd/usrrdd.c b/harbour/src/rdd/usrrdd/usrrdd.c index 29c242be9e..808c49669d 100644 --- a/harbour/src/rdd/usrrdd/usrrdd.c +++ b/harbour/src/rdd/usrrdd/usrrdd.c @@ -2928,13 +2928,24 @@ HB_FUNC( USRRDD_ID ) { AREAP pArea; - if( HB_ISNUM( 1 ) ) - pArea = hb_usrGetAreaPointer( hb_parni( 1 ) ); - else - pArea = ( AREAP ) hb_parptr( 1 ); + if( HB_ISCHAR( 1 ) ) + { + HB_USHORT uiRddId; + LPRDDNODE pRddNode = hb_rddFindNode( hb_parc( 1 ), &uiRddId ); - if( pArea && pArea->rddID < s_uiUsrNodes && SELF_USRNODE( pArea ) ) - hb_retni( pArea->rddID ); + if( pRddNode && uiRddId < s_uiUsrNodes && s_pUsrRddNodes[ uiRddId ] ) + hb_retni( uiRddId ); + } + else + { + if( HB_ISNUM( 1 ) ) + pArea = hb_usrGetAreaPointer( hb_parni( 1 ) ); + else + pArea = ( AREAP ) hb_parptr( 1 ); + + if( pArea && pArea->rddID < s_uiUsrNodes && SELF_USRNODE( pArea ) ) + hb_retni( pArea->rddID ); + } } HB_FUNC( USRRDD_AREADATA ) diff --git a/harbour/src/rdd/wacore.c b/harbour/src/rdd/wacore.c index 2541b2c615..74c7ebf37a 100644 --- a/harbour/src/rdd/wacore.c +++ b/harbour/src/rdd/wacore.c @@ -372,13 +372,14 @@ const char * hb_rddDefaultDrv( const char * szDriver ) if( szDriver && *szDriver ) { char szNewDriver[ HB_RDD_MAX_DRIVERNAME_LEN + 1 ]; - HB_USHORT uiRddID; + LPRDDNODE pRddNode; hb_strncpyUpper( szNewDriver, szDriver, sizeof( szNewDriver ) - 1 ); - if( !hb_rddFindNode( szNewDriver, &uiRddID ) ) + pRddNode = hb_rddFindNode( szNewDriver, NULL ); + if( !pRddNode ) return NULL; - pRddInfo->szDefaultRDD = hb_rddGetNode( uiRddID )->szName; + pRddInfo->szDefaultRDD = pRddNode->szName; } else if( !pRddInfo->szDefaultRDD && hb_rddGetNode( 0 ) ) {