Skip to content

Commit 0a04c42

Browse files
authored
Merge pull request #143 from jayrm/trim-any-optimization
rtlib: optimization of [L/R]TrimAny function code
2 parents 1937d58 + be41e88 commit 0a04c42

File tree

7 files changed

+137
-179
lines changed

7 files changed

+137
-179
lines changed

changelog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Version 1.07.0
1717
- github #138: rtlib: freebsd: Fix deprecated use of VM_METER to use VM_TOTAL (William Breathitt Gray)
1818
- sf.net #899: TRIM( wstring ) causes crash if string is single space
1919
- sf.net #900: LTRIM( wstring, filter ) and TRIM( wstring, filter ) truncate result if filter is zero length string
20+
- github #116: Fix optimizations in [L/R]TrimAny rtlib functions (SkyFish)
2021

2122

2223
Version 1.06.0

src/rtlib/str_ltrimany.c

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,68 +4,61 @@
44

55
FBCALL FBSTRING *fb_LTrimAny
66
(
7-
FBSTRING *src,
7+
FBSTRING *src,
88
FBSTRING *pattern
99
)
1010
{
11-
const char *pachText = NULL;
11+
const char *pachText = NULL;
1212
FBSTRING *dst;
1313
ssize_t len;
1414

15-
if( src == NULL )
16-
{
17-
fb_hStrDelTemp( pattern );
18-
return &__fb_ctx.null_desc;
19-
}
15+
if( src == NULL )
16+
{
17+
fb_hStrDelTemp( pattern );
18+
return &__fb_ctx.null_desc;
19+
}
2020

21-
FB_STRLOCK();
21+
FB_STRLOCK();
2222

2323
len = 0;
2424
if( src->data != NULL )
25-
{
26-
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
27-
pachText = src->data;
28-
len = FB_STRSIZE( src );
25+
{
26+
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
27+
pachText = src->data;
28+
len = FB_STRSIZE( src );
2929
if( len_pattern != 0 )
3030
{
3131
while ( len != 0 )
32-
{
33-
ssize_t i;
34-
for( i=0; i!=len_pattern; ++i )
35-
{
36-
if( FB_MEMCHR( pattern->data, *pachText, len_pattern )!=NULL )
37-
break;
38-
}
39-
40-
if( i==len_pattern )
41-
break;
32+
{
33+
if( FB_MEMCHR( pattern->data, *pachText, len_pattern ) == NULL )
34+
break;
4235

43-
--len;
44-
++pachText;
36+
--len;
37+
++pachText;
4538
}
4639
}
4740
}
4841

4942
if( len > 0 )
5043
{
5144
/* alloc temp string */
52-
dst = fb_hStrAllocTemp_NoLock( NULL, len );
45+
dst = fb_hStrAllocTemp_NoLock( NULL, len );
5346
if( dst != NULL )
5447
{
5548
/* simple copy */
5649
fb_hStrCopy( dst->data, pachText, len );
5750
}
5851
else
5952
dst = &__fb_ctx.null_desc;
60-
}
53+
}
6154
else
6255
dst = &__fb_ctx.null_desc;
6356

6457
/* del if temp */
6558
fb_hStrDelTemp_NoLock( src );
66-
fb_hStrDelTemp_NoLock( pattern );
59+
fb_hStrDelTemp_NoLock( pattern );
6760

68-
FB_STRUNLOCK();
61+
FB_STRUNLOCK();
6962

7063
return dst;
7164
}

src/rtlib/str_rtrimany.c

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,61 +7,54 @@ FBCALL FBSTRING *fb_RTrimAny( FBSTRING *src, FBSTRING *pattern )
77
FBSTRING *dst;
88
ssize_t len;
99

10-
if( src == NULL )
11-
{
12-
fb_hStrDelTemp( pattern );
13-
return &__fb_ctx.null_desc;
14-
}
10+
if( src == NULL )
11+
{
12+
fb_hStrDelTemp( pattern );
13+
return &__fb_ctx.null_desc;
14+
}
1515

16-
FB_STRLOCK();
16+
FB_STRLOCK();
1717

1818
len = 0;
1919
if( src->data != NULL )
20-
{
21-
const char *pachText = src->data;
20+
{
21+
const char *pachText = src->data;
2222
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
23-
len = FB_STRSIZE( src );
23+
len = FB_STRSIZE( src );
2424
if( len_pattern != 0 )
2525
{
2626
while ( len != 0 )
27-
{
28-
ssize_t i;
29-
--len;
30-
for( i=0; i!=len_pattern; ++i )
31-
{
32-
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern )!=NULL )
33-
break;
34-
}
35-
36-
if( i==len_pattern )
37-
{
38-
++len;
39-
break;
40-
}
27+
{
28+
--len;
29+
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern ) == NULL )
30+
{
31+
++len;
32+
break;
33+
}
4134
}
4235
}
4336
}
4437

4538
if( len > 0 )
4639
{
4740
/* alloc temp string */
48-
dst = fb_hStrAllocTemp_NoLock( NULL, len );
41+
dst = fb_hStrAllocTemp_NoLock( NULL, len );
4942
if( dst != NULL )
5043
{
5144
/* simple copy */
5245
fb_hStrCopy( dst->data, src->data, len );
5346
}
5447
else
5548
dst = &__fb_ctx.null_desc;
56-
}
49+
}
5750
else
5851
dst = &__fb_ctx.null_desc;
5952

6053
/* del if temp */
6154
fb_hStrDelTemp_NoLock( src );
6255
fb_hStrDelTemp_NoLock( pattern );
6356

64-
FB_STRUNLOCK();
57+
FB_STRUNLOCK();
6558

6659
return dst;
6760
}

src/rtlib/str_trimany.c

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,80 +4,66 @@
44

55
FBCALL FBSTRING *fb_TrimAny( FBSTRING *src, FBSTRING *pattern )
66
{
7-
const char *pachText = NULL;
7+
const char *pachText = NULL;
88
FBSTRING *dst;
99
ssize_t len;
1010

11-
if( src == NULL )
12-
{
13-
fb_hStrDelTemp( pattern );
14-
return &__fb_ctx.null_desc;
15-
}
11+
if( src == NULL )
12+
{
13+
fb_hStrDelTemp( pattern );
14+
return &__fb_ctx.null_desc;
15+
}
1616

17-
FB_STRLOCK();
17+
FB_STRLOCK();
1818

1919
len = 0;
2020
if( src->data != NULL )
21-
{
22-
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
23-
pachText = src->data;
24-
len = FB_STRSIZE( src );
21+
{
22+
ssize_t len_pattern = ((pattern != NULL) && (pattern->data != NULL)? FB_STRSIZE( pattern ) : 0);
23+
pachText = src->data;
24+
len = FB_STRSIZE( src );
2525
if( len_pattern != 0 )
2626
{
2727
while ( len != 0 )
28-
{
29-
ssize_t i;
30-
for( i=0; i!=len_pattern; ++i )
31-
{
32-
if( FB_MEMCHR( pattern->data, *pachText, len_pattern )!=NULL )
33-
break;
34-
}
35-
36-
if( i==len_pattern )
37-
break;
28+
{
29+
if( FB_MEMCHR( pattern->data, *pachText, len_pattern ) == NULL )
30+
break;
3831

39-
--len;
40-
++pachText;
32+
--len;
33+
++pachText;
4134
}
4235
while ( len != 0 )
43-
{
44-
ssize_t i;
45-
--len;
46-
for( i=0; i!=len_pattern; ++i )
47-
{
48-
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern )!=NULL )
49-
break;
50-
}
51-
52-
if( i==len_pattern )
53-
{
54-
++len;
55-
break;
56-
}
36+
{
37+
--len;
38+
if( FB_MEMCHR( pattern->data, pachText[len], len_pattern ) == NULL )
39+
{
40+
++len;
41+
break;
42+
}
5743
}
5844
}
5945
}
6046

6147
if( len > 0 )
6248
{
6349
/* alloc temp string */
64-
dst = fb_hStrAllocTemp_NoLock( NULL, len );
50+
dst = fb_hStrAllocTemp_NoLock( NULL, len );
6551
if( dst != NULL )
6652
{
6753
/* simple copy */
6854
fb_hStrCopy( dst->data, pachText, len );
6955
}
7056
else
7157
dst = &__fb_ctx.null_desc;
72-
}
58+
}
7359
else
7460
dst = &__fb_ctx.null_desc;
7561

7662
/* del if temp */
7763
fb_hStrDelTemp_NoLock( src );
78-
fb_hStrDelTemp_NoLock( pattern );
64+
fb_hStrDelTemp_NoLock( pattern );
7965

80-
FB_STRUNLOCK();
66+
FB_STRUNLOCK();
8167

8268
return dst;
8369
}

src/rtlib/strw_ltrimany.c

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,43 @@
44

55
FBCALL FB_WCHAR *fb_WstrLTrimAny ( const FB_WCHAR *src, const FB_WCHAR *pattern )
66
{
7-
const FB_WCHAR *pachText;
8-
FB_WCHAR *dst;
7+
const FB_WCHAR *pachText;
8+
FB_WCHAR *dst;
99
ssize_t len;
1010

11-
if( src == NULL ) {
12-
return NULL;
13-
}
11+
if( src == NULL ) {
12+
return NULL;
13+
}
1414

1515
len = fb_wstr_Len( src );
16-
{
17-
ssize_t len_pattern = fb_wstr_Len( pattern );
18-
pachText = src;
19-
while ( len != 0 )
20-
{
21-
ssize_t i;
22-
for( i=0; i!=len_pattern; ++i ) {
23-
if( wcschr( pattern, *pachText )!=NULL ) {
24-
break;
25-
}
26-
}
27-
if( i==len_pattern ) {
28-
break;
29-
}
30-
--len;
31-
++pachText;
16+
{
17+
ssize_t len_pattern = fb_wstr_Len( pattern );
18+
pachText = src;
19+
if( len_pattern != 0 )
20+
{
21+
while ( len != 0 )
22+
{
23+
if( wcschr( pattern, *pachText )==NULL ) {
24+
break;
25+
}
26+
--len;
27+
++pachText;
28+
}
3229
}
3330
}
3431

3532
if( len > 0 )
3633
{
3734
/* alloc temp string */
38-
dst = fb_wstr_AllocTemp( len );
35+
dst = fb_wstr_AllocTemp( len );
3936
if( dst != NULL )
4037
{
4138
/* simple copy */
4239
fb_wstr_Copy( dst, pachText, len );
4340
}
4441
else
4542
dst = NULL;
46-
}
43+
}
4744
else
4845
dst = NULL;
4946

0 commit comments

Comments
 (0)