2016-03-30 16:10 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* src/rtl/gttone.c
    * applied patch from Andi Jahja for new BCC versions - many thanks

  * src/rtl/strrepl.c
    % added optimization code for strings longer then 1024 bytes
      For very long strings it can improve replace performance 20 or
      even more times.

  * src/rtl/sha2.c
  * src/rtl/val.c
  * src/vm/dynsym.c
  * src/vm/eval.c
  * src/vm/thread.c
    * formatting
This commit is contained in:
Przemysław Czerpak
2016-03-30 16:10:34 +02:00
parent b5182e2aec
commit 7af9c8c8ef
8 changed files with 98 additions and 19 deletions

View File

@@ -10,6 +10,22 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2016-03-30 16:10 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/rtl/gttone.c
* applied patch from Andi Jahja for new BCC versions - many thanks
* src/rtl/strrepl.c
% added optimization code for strings longer then 1024 bytes
For very long strings it can improve replace performance 20 or
even more times.
* src/rtl/sha2.c
* src/rtl/val.c
* src/vm/dynsym.c
* src/vm/eval.c
* src/vm/thread.c
* formatting
2016-03-28 13:09 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
* config/dyn.mk
* config/win/mingw.mk

View File

@@ -83,14 +83,14 @@ static int hb_Inp9x( unsigned short int usPort )
HB_TRACE( HB_TR_DEBUG, ( "hb_Inp9x(%hu)", usPort ) );
#if defined( __BORLANDC__ ) || defined( __DMC__ )
#if defined( __DMC__ )
_DX = usPort;
__emit__(0xEC); /* ASM IN AL, DX */
__emit__(0x32,0xE4); /* ASM XOR AH, AH */
usVal = _AX;
#elif defined( __XCC__ ) || defined( __POCC__ )
#elif defined( __XCC__ ) || defined( __POCC__ ) || defined( __BORLANDC__ )
__asm {
mov dx, usPort
@@ -121,13 +121,13 @@ static int hb_Outp9x( unsigned short int usPort, unsigned short int usVal )
{
HB_TRACE( HB_TR_DEBUG, ( "hb_Outp9x(%hu, %hu)", usPort, usVal ) );
#if defined( __BORLANDC__ ) || defined( __DMC__ )
#if defined( __DMC__ )
_DX = usPort;
_AL = usVal;
__emit__(0xEE); /* ASM OUT DX, AL */
#elif defined( __XCC__ ) || defined( __POCC__ )
#elif defined( __XCC__ ) || defined( __POCC__ ) || defined( __BORLANDC__ )
__asm {
mov dx, usPort

View File

@@ -118,7 +118,7 @@
wv[h] = t1 + t2; \
}
#define SHA512_EXP(a, b, c, d, e, f, g ,h, j) \
#define SHA512_EXP(a, b, c, d, e, f, g, h, j) \
{ \
t1 = wv[h] + SHA512_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
+ sha512_k[j] + w[j]; \
@@ -154,10 +154,10 @@ static const uint64 sha384_h0[8] =
_ULL( 0xdb0c2e0d64f98fa7 ), _ULL( 0x47b5481dbefa4fa4 )};
static const uint64 sha512_h0[8] =
{_ULL( 0x6a09e667f3bcc908 ), _ULL( 0xbb67ae8584caa73b ) ,
_ULL( 0x3c6ef372fe94f82b ), _ULL( 0xa54ff53a5f1d36f1 ) ,
_ULL( 0x510e527fade682d1 ), _ULL( 0x9b05688c2b3e6c1f ) ,
_ULL( 0x1f83d9abfb41bd6b ), _ULL( 0x5be0cd19137e2179 ) };
{_ULL( 0x6a09e667f3bcc908 ), _ULL( 0xbb67ae8584caa73b ),
_ULL( 0x3c6ef372fe94f82b ), _ULL( 0xa54ff53a5f1d36f1 ),
_ULL( 0x510e527fade682d1 ), _ULL( 0x9b05688c2b3e6c1f ),
_ULL( 0x1f83d9abfb41bd6b ), _ULL( 0x5be0cd19137e2179 )};
static const uint32 sha256_k[64] =
{0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,

View File

@@ -72,13 +72,74 @@ HB_FUNC( HB_STRREPLACE )
const char * pszText = hb_itemGetCPtr( pText );
const char * ptr;
char * pszResult = NULL;
HB_SIZE * ptrOpt = NULL;
HB_BOOL fNext = HB_FALSE;
HB_SIZE nDst, nSize, nPos, nAt, nSkip, nTmp;
nDst = hb_itemSize( HB_IS_HASH( pSrc ) ? pSrc : pDst );
if( nText > 1024 )
{
ptrOpt = ( HB_SIZE * ) hb_xgrabz( 256 * sizeof( HB_SIZE ) );
for( nAt = 0; nAt < nSrc; ++nAt )
{
HB_UCHAR uc;
if( pszSrc )
uc = ( HB_UCHAR ) pszSrc[ nAt ];
else
{
if( HB_IS_HASH( pSrc ) )
pDst = hb_hashGetKeyAt( pSrc, nAt + 1 );
else
pDst = hb_arrayGetItemPtr( pSrc, nAt + 1 );
if( hb_itemGetCLen( pDst ) == 0 )
continue;
uc = ( HB_UCHAR ) hb_itemGetCPtr( pDst )[ 0 ];
}
if( ptrOpt[ uc ] == 0 )
ptrOpt[ uc ] = nAt + 1;
else if( pszSrc == NULL )
fNext = HB_TRUE;
}
}
nSize = nPos = nSkip = 0;
while( nPos < nText )
{
if( pszSrc )
if( ptrOpt )
{
nAt = ptrOpt[ ( HB_UCHAR ) pszText[ nPos ] ];
if( nAt == 0 || pszSrc )
nSkip = 1;
else
{
for( ; nAt <= nSrc; ++nAt )
{
if( HB_IS_HASH( pSrc ) )
{
pDst = hb_hashGetKeyAt( pSrc, nAt );
nSkip = hb_itemGetCLen( pDst );
ptr = hb_itemGetCPtr( pDst );
}
else
{
nSkip = hb_arrayGetCLen( pSrc, nAt );
ptr = hb_arrayGetCPtr( pSrc, nAt );
}
if( nSkip > 0 && nSkip <= nText - nPos &&
memcmp( pszText + nPos, ptr, nSkip ) == 0 )
break;
if( !fNext )
nAt = nSrc;
}
if( nAt > nSrc )
{
nAt = 0;
nSkip = 1;
}
}
}
else if( pszSrc )
{
ptr = ( const char * )
memchr( pszSrc, ( HB_UCHAR ) pszText[ nPos ], nSrc );
@@ -101,7 +162,7 @@ HB_FUNC( HB_STRREPLACE )
ptr = hb_arrayGetCPtr( pSrc, nAt );
}
if( nSkip > 0 && nSkip <= nText - nPos &&
memcmp( pszText + nPos, ptr , nSkip ) == 0 )
memcmp( pszText + nPos, ptr, nSkip ) == 0 )
break;
}
if( nAt > nSrc )
@@ -165,6 +226,8 @@ HB_FUNC( HB_STRREPLACE )
}
}
}
if( ptrOpt )
hb_xfree( ptrOpt );
hb_retclen_buffer( pszResult, nSize );
}
else

View File

@@ -84,7 +84,7 @@ HB_FUNC( HB_VAL )
HB_MAXINT lValue;
double dValue;
fDbl = hb_valStrnToNum( szText, iLen, &lValue, &dValue , &iDec, &iWidth );
fDbl = hb_valStrnToNum( szText, iLen, &lValue, &dValue, &iDec, &iWidth );
if( HB_ISNUM( 2 ) )
iLen = hb_parni( 2 );

View File

@@ -721,8 +721,8 @@ HB_FUNC( __DYNSISFUN ) /* returns .T. if a symbol has a function/procedure point
}
HB_FUNC( __DYNSGETPRF ) /* profiler: It returns an array with a function or procedure
called and consumed times { nTimes, nTime }
, given the dynamic symbol index */
called and consumed times { nTimes, nTime },
given the dynamic symbol index */
{
HB_STACK_TLS_PRELOAD
#ifndef HB_NO_PROFILER

View File

@@ -393,16 +393,16 @@ HB_FUNC( HB_FORNEXT ) /* nStart, nEnd | bEnd, bCode, nStep */
* hb_ExecFromArray( <cFuncName> [, <aParams> ] )
* hb_ExecFromArray( @<funcName>() [, <aParams> ] )
* hb_ExecFromArray( <bCodeBlock> [, <aParams> ] )
* hb_ExecFromArray( <oObject> , <cMethodName> [, <aParams> ] )
* hb_ExecFromArray( <oObject> , @<msgName>() [, <aParams> ] )
* hb_ExecFromArray( <oObject>, <cMethodName> [, <aParams> ] )
* hb_ExecFromArray( <oObject>, @<msgName>() [, <aParams> ] )
* or:
* hb_ExecFromArray( <aExecArray> )
* where <aExecArray> is in one of the following format:
* { <cFuncName> [, <params,...>] }
* { @<funcName>() [, <params,...>] }
* { <bCodeBlock> [, <params,...>] }
* { <oObject> , <cMethodName> [, <params,...>] }
* { <oObject> , @<msgName>() [, <params,...>] }
* { <oObject>, <cMethodName> [, <params,...>] }
* { <oObject>, @<msgName>() [, <params,...>] }
*/
HB_FUNC( HB_EXECFROMARRAY )
{

View File

@@ -47,7 +47,7 @@
/*
Harbour level API:
hb_threadStart( [<nThreadAttrs> ,] <@sStart()> | <bStart> | <cStart> [, <params,...> ] ) -> <pThID>
hb_threadStart( [ <nThreadAttrs>, ] <@sStart()> | <bStart> | <cStart> [, <params,...> ] ) -> <pThID>
hb_threadSelf() -> <pThID> | NIL
hb_threadID( [ <pThID> ] ) -> <nThNo>
hb_threadJoin( <pThID> [, @<xRetCode> ] ) -> <lOK>