Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit32ba2b5

Browse files
committed
Use memcmp() rather than strncmp() when shorter string length is known.
It appears that this will be faster for all but the shortest strings;at least one some platforms, memcmp() can use word-at-a-time comparisons.Noah Misch, somewhat pared down.
1 parentc5160b7 commit32ba2b5

File tree

7 files changed

+33
-33
lines changed

7 files changed

+33
-33
lines changed

‎contrib/hstore/hstore_io.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,9 @@ comparePairs(const void *a, const void *b)
280280
{
281281
if (((Pairs*)a)->keylen== ((Pairs*)b)->keylen)
282282
{
283-
intres=strncmp(((Pairs*)a)->key,
284-
((Pairs*)b)->key,
285-
((Pairs*)a)->keylen);
283+
intres=memcmp(((Pairs*)a)->key,
284+
((Pairs*)b)->key,
285+
((Pairs*)a)->keylen);
286286

287287
if (res)
288288
returnres;
@@ -324,7 +324,7 @@ hstoreUniquePairs(Pairs *a, int4 l, int4 *buflen)
324324
while (ptr-a<l)
325325
{
326326
if (ptr->keylen==res->keylen&&
327-
strncmp(ptr->key,res->key,res->keylen)==0)
327+
memcmp(ptr->key,res->key,res->keylen)==0)
328328
{
329329
if (ptr->needfree)
330330
{

‎contrib/hstore/hstore_op.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ hstoreFindKey(HStore *hs, int *lowbound, char *key, int keylen)
4949
stopMiddle=stopLow+ (stopHigh-stopLow) /2;
5050

5151
if (HS_KEYLEN(entries,stopMiddle)==keylen)
52-
difference=strncmp(HS_KEY(entries,base,stopMiddle),key,keylen);
52+
difference=memcmp(HS_KEY(entries,base,stopMiddle),key,keylen);
5353
else
5454
difference= (HS_KEYLEN(entries,stopMiddle)>keylen) ?1 :-1;
5555

@@ -263,7 +263,7 @@ hstore_delete(PG_FUNCTION_ARGS)
263263
intlen=HS_KEYLEN(es,i);
264264
char*ptrs=HS_KEY(es,bufs,i);
265265

266-
if (!(len==keylen&&strncmp(ptrs,keyptr,keylen)==0))
266+
if (!(len==keylen&&memcmp(ptrs,keyptr,keylen)==0))
267267
{
268268
intvallen=HS_VALLEN(es,i);
269269

@@ -331,9 +331,9 @@ hstore_delete_array(PG_FUNCTION_ARGS)
331331
intskeylen=HS_KEYLEN(es,i);
332332

333333
if (skeylen==key_pairs[j].keylen)
334-
difference=strncmp(HS_KEY(es,ps,i),
335-
key_pairs[j].key,
336-
key_pairs[j].keylen);
334+
difference=memcmp(HS_KEY(es,ps,i),
335+
key_pairs[j].key,
336+
key_pairs[j].keylen);
337337
else
338338
difference= (skeylen>key_pairs[j].keylen) ?1 :-1;
339339
}
@@ -416,9 +416,9 @@ hstore_delete_hstore(PG_FUNCTION_ARGS)
416416
ints2keylen=HS_KEYLEN(es2,j);
417417

418418
if (skeylen==s2keylen)
419-
difference=strncmp(HS_KEY(es,ps,i),
420-
HS_KEY(es2,ps2,j),
421-
skeylen);
419+
difference=memcmp(HS_KEY(es,ps,i),
420+
HS_KEY(es2,ps2,j),
421+
skeylen);
422422
else
423423
difference= (skeylen>s2keylen) ?1 :-1;
424424
}
@@ -433,7 +433,7 @@ hstore_delete_hstore(PG_FUNCTION_ARGS)
433433
if (snullval!=HS_VALISNULL(es2,j)
434434
|| (!snullval
435435
&& (svallen!=HS_VALLEN(es2,j)
436-
||strncmp(HS_VAL(es,ps,i),HS_VAL(es2,ps2,j),svallen)!=0)))
436+
||memcmp(HS_VAL(es,ps,i),HS_VAL(es2,ps2,j),svallen)!=0)))
437437
{
438438
HS_COPYITEM(ed,bufd,pd,
439439
HS_KEY(es,ps,i),HS_KEYLEN(es,i),
@@ -526,9 +526,9 @@ hstore_concat(PG_FUNCTION_ARGS)
526526
ints2keylen=HS_KEYLEN(es2,s2idx);
527527

528528
if (s1keylen==s2keylen)
529-
difference=strncmp(HS_KEY(es1,ps1,s1idx),
530-
HS_KEY(es2,ps2,s2idx),
531-
s1keylen);
529+
difference=memcmp(HS_KEY(es1,ps1,s1idx),
530+
HS_KEY(es2,ps2,s2idx),
531+
s1keylen);
532532
else
533533
difference= (s1keylen>s2keylen) ?1 :-1;
534534
}
@@ -996,7 +996,7 @@ hstore_contains(PG_FUNCTION_ARGS)
996996
if (nullval!=HS_VALISNULL(ve,idx)
997997
|| (!nullval
998998
&& (vallen!=HS_VALLEN(ve,idx)
999-
||strncmp(HS_VAL(te,tstr,i),HS_VAL(ve,vstr,idx),vallen))))
999+
||memcmp(HS_VAL(te,tstr,i),HS_VAL(ve,vstr,idx),vallen))))
10001000
res= false;
10011001
}
10021002
else

‎contrib/ltree/ltree_gist.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ gist_tqcmp(ltree *t, lquery *q)
546546
while (an>0&&bn>0)
547547
{
548548
bl=LQL_FIRST(ql);
549-
if ((res=strncmp(al->name,bl->name,Min(al->len,bl->len)))==0)
549+
if ((res=memcmp(al->name,bl->name,Min(al->len,bl->len)))==0)
550550
{
551551
if (al->len!=bl->len)
552552
returnal->len-bl->len;

‎contrib/ltree/ltree_op.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ ltree_compare(const ltree *a, const ltree *b)
6868

6969
while (an>0&&bn>0)
7070
{
71-
if ((res=strncmp(al->name,bl->name,Min(al->len,bl->len)))==0)
71+
if ((res=memcmp(al->name,bl->name,Min(al->len,bl->len)))==0)
7272
{
7373
if (al->len!=bl->len)
7474
return (al->len-bl->len)*10* (an+1);
@@ -165,7 +165,7 @@ inner_isparent(const ltree *c, const ltree *p)
165165
{
166166
if (cl->len!=pl->len)
167167
return false;
168-
if (strncmp(cl->name,pl->name,cl->len))
168+
if (memcmp(cl->name,pl->name,cl->len))
169169
return false;
170170

171171
pn--;
@@ -373,7 +373,7 @@ ltree_index(PG_FUNCTION_ARGS)
373373
bptr=LTREE_FIRST(b);
374374
for (j=0;j<b->numlevel;j++)
375375
{
376-
if (!(aptr->len==bptr->len&&strncmp(aptr->name,bptr->name,aptr->len)==0))
376+
if (!(aptr->len==bptr->len&&memcmp(aptr->name,bptr->name,aptr->len)==0))
377377
break;
378378
aptr=LEVEL_NEXT(aptr);
379379
bptr=LEVEL_NEXT(bptr);
@@ -451,7 +451,7 @@ lca_inner(ltree **a, int len)
451451
num=0;
452452
for (i=0;i<Min(tmp, (*ptr)->numlevel-1);i++)
453453
{
454-
if (l1->len==l2->len&&strncmp(l1->name,l2->name,l1->len)==0)
454+
if (l1->len==l2->len&&memcmp(l1->name,l2->name,l1->len)==0)
455455
num=i+1;
456456
else
457457
break;

‎src/backend/nodes/readfuncs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1196,7 +1196,7 @@ parseNodeString(void)
11961196
token=pg_strtok(&length);
11971197

11981198
#defineMATCH(tokname,namelen) \
1199-
(length == namelen &&strncmp(token, tokname, namelen) == 0)
1199+
(length == namelen &&memcmp(token, tokname, namelen) == 0)
12001200

12011201
if (MATCH("QUERY",5))
12021202
return_value=_readQuery();

‎src/backend/utils/adt/varchar.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ bpchareq(PG_FUNCTION_ARGS)
690690
if (len1!=len2)
691691
result= false;
692692
else
693-
result= (strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),len1)==0);
693+
result= (memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),len1)==0);
694694

695695
PG_FREE_IF_COPY(arg1,0);
696696
PG_FREE_IF_COPY(arg2,1);
@@ -717,7 +717,7 @@ bpcharne(PG_FUNCTION_ARGS)
717717
if (len1!=len2)
718718
result= true;
719719
else
720-
result= (strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),len1)!=0);
720+
result= (memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),len1)!=0);
721721

722722
PG_FREE_IF_COPY(arg1,0);
723723
PG_FREE_IF_COPY(arg2,1);
@@ -905,7 +905,7 @@ internal_bpchar_pattern_compare(BpChar *arg1, BpChar *arg2)
905905
len1=bcTruelen(arg1);
906906
len2=bcTruelen(arg2);
907907

908-
result=strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),Min(len1,len2));
908+
result=memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),Min(len1,len2));
909909
if (result!=0)
910910
returnresult;
911911
elseif (len1<len2)

‎src/backend/utils/adt/varlena.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,7 @@ varstr_cmp(char *arg1, int len1, char *arg2, int len2)
12861286
*/
12871287
if (lc_collate_is_c())
12881288
{
1289-
result=strncmp(arg1,arg2,Min(len1,len2));
1289+
result=memcmp(arg1,arg2,Min(len1,len2));
12901290
if ((result==0)&& (len1!=len2))
12911291
result= (len1<len2) ?-1 :1;
12921292
}
@@ -1370,7 +1370,7 @@ varstr_cmp(char *arg1, int len1, char *arg2, int len2)
13701370
*/
13711371
if (result==0)
13721372
{
1373-
result=strncmp(arg1,arg2,Min(len1,len2));
1373+
result=memcmp(arg1,arg2,Min(len1,len2));
13741374
if ((result==0)&& (len1!=len2))
13751375
result= (len1<len2) ?-1 :1;
13761376
}
@@ -1462,8 +1462,8 @@ texteq(PG_FUNCTION_ARGS)
14621462
if (VARSIZE_ANY_EXHDR(arg1)!=VARSIZE_ANY_EXHDR(arg2))
14631463
result= false;
14641464
else
1465-
result= (strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),
1466-
VARSIZE_ANY_EXHDR(arg1))==0);
1465+
result= (memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),
1466+
VARSIZE_ANY_EXHDR(arg1))==0);
14671467

14681468
PG_FREE_IF_COPY(arg1,0);
14691469
PG_FREE_IF_COPY(arg2,1);
@@ -1485,8 +1485,8 @@ textne(PG_FUNCTION_ARGS)
14851485
if (VARSIZE_ANY_EXHDR(arg1)!=VARSIZE_ANY_EXHDR(arg2))
14861486
result= true;
14871487
else
1488-
result= (strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),
1489-
VARSIZE_ANY_EXHDR(arg1))!=0);
1488+
result= (memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),
1489+
VARSIZE_ANY_EXHDR(arg1))!=0);
14901490

14911491
PG_FREE_IF_COPY(arg1,0);
14921492
PG_FREE_IF_COPY(arg2,1);
@@ -1612,7 +1612,7 @@ internal_text_pattern_compare(text *arg1, text *arg2)
16121612
len1=VARSIZE_ANY_EXHDR(arg1);
16131613
len2=VARSIZE_ANY_EXHDR(arg2);
16141614

1615-
result=strncmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),Min(len1,len2));
1615+
result=memcmp(VARDATA_ANY(arg1),VARDATA_ANY(arg2),Min(len1,len2));
16161616
if (result!=0)
16171617
returnresult;
16181618
elseif (len1<len2)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp