Enrico,
The modification is simple.
In strtran.c
After line 181 insert the instruction:
return;
After line 201 (out of else) insert the instruction:
hb_itemReturn( pText);
Delete all "else" from line 183 to 201
Note: Line numbers before any modification.
With this modification, when STRTRAN not modify the text, return the
same item passed as parameter.
Code before:
-------------------------
hb_retclenAdopt( szResult, ulLength );
}
else
{
hb_retclen( szText, ulText );
}
}
else
{
hb_retclen( szText, ulText );
}
}
else
{
hb_retclen( szText, ulText );
}
}
else
{
hb_retclen( szText, ulText );
}
}
else
{
hb_errRT_BASE_SubstR( EG_ARG, 1126, NULL, "STRTRAN", 3,
hb_paramError( 1 ), hb_paramError( 2 ), hb_paramError( 3 ) ); /* NOTE:
Undocumented but existing Clipper Run-time error [vszakats] */
}
-------------------------
Code after:
-------------------------
hb_retclenAdopt( szResult, ulLength );
return;
}
}
}
}
hb_itemReturn( pText );
}
else
{
hb_errRT_BASE_SubstR( EG_ARG, 1126, NULL, "STRTRAN", 3,
hb_paramError( 1 ), hb_paramError( 2 ), hb_paramError( 3 ) ); /* NOTE:
Undocumented but existing Clipper Run-time error [vszakats] */
}
------------------
Walter Negro
El 11/06/2011 06:51 a.m., Enrico Maria Giordano escribió:
> Dear friends, look at the following sample:
>
> FUNCTION MAIN()
>
> LOCAL cShort := SPACE( 100 )
> LOCAL cLong := SPACE( 1024 * 1024 )
>
> LOCAL nSec
>
> LOCAL i
>
> nSec = SECONDS()
>
> FOR i = 1 TO 200000
> cShort = STRTRAN( cShort, "TEST", "ABCDEFG" )
> NEXT
>
> ? SECONDS() - nSec
>
> nSec = SECONDS()
>
> FOR i = 1 TO 200000
> IF AT( "TEST", cShort )> 0
> cShort = STRTRAN( cShort, "TEST", "ABCDEFG" )
> ENDIF
> NEXT
>
> ? SECONDS() - nSec
>
> nSec = SECONDS()
>
> FOR i = 1 TO 1000
> cLong = STRTRAN( cLong, "TEST", "ABCDEFG" )
> NEXT
>
> ? SECONDS() - nSec
>
> nSec = SECONDS()
>
> FOR i = 1 TO 1000
> IF AT( "TEST", cLong )> 0
> cLong = STRTRAN( cLong, "TEST", "ABCDEFG" )
> ENDIF
> NEXT
>
> ? SECONDS() - nSec
>
> INKEY( 0 )
>
> RETURN NIL
>
> The results on my PC are:
>
> 0.33
> 0.16
> 10.86
> 3.38
>
> So I wonder if we can speedup StrTran() just add the AT() test inside
> StrTran() C level code.
>
> Let me know if it can be done and if it is a good idea.
>
> EMG
>
> --
> EMAG Software Homepage: http://www.emagsoftware.it
> The EMG's ZX-Spectrum Page: http://www.emagsoftware.it/spectrum
> The Best of Spectrum Games: http://www.emagsoftware.it/tbosg
> The EMG Music page: http://www.emagsoftware.it/emgmusic
>
>
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> xHarbour-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/xharbour-developers
>
>
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
xHarbour-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xharbour-developers