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

Commitbfa2cee

Browse files
committed
Move bsearch_arg to src/port
Until now the bsearch_arg function was used only in extended statisticscode, so it was defined in that code. But we already have qsort_arg insrc/port, so let's move it next to it.
1 parent063dd37 commitbfa2cee

File tree

6 files changed

+85
-37
lines changed

6 files changed

+85
-37
lines changed

‎src/backend/statistics/extended_stats.c

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -659,37 +659,6 @@ compare_datums_simple(Datum a, Datum b, SortSupport ssup)
659659
returnApplySortComparator(a, false,b, false,ssup);
660660
}
661661

662-
/* simple counterpart to qsort_arg */
663-
void*
664-
bsearch_arg(constvoid*key,constvoid*base,size_tnmemb,size_tsize,
665-
int (*compar) (constvoid*,constvoid*,void*),
666-
void*arg)
667-
{
668-
size_tl,
669-
u,
670-
idx;
671-
constvoid*p;
672-
intcomparison;
673-
674-
l=0;
675-
u=nmemb;
676-
while (l<u)
677-
{
678-
idx= (l+u) /2;
679-
p= (void*) (((constchar*)base)+ (idx*size));
680-
comparison= (*compar) (key,p,arg);
681-
682-
if (comparison<0)
683-
u=idx;
684-
elseif (comparison>0)
685-
l=idx+1;
686-
else
687-
return (void*)p;
688-
}
689-
690-
returnNULL;
691-
}
692-
693662
/*
694663
* build_attnums_array
695664
*Transforms a bitmap into an array of AttrNumber values.

‎src/include/port.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,11 @@ typedef int (*qsort_arg_comparator) (const void *a, const void *b, void *arg);
508508
externvoidqsort_arg(void*base,size_tnel,size_telsize,
509509
qsort_arg_comparatorcmp,void*arg);
510510

511+
externvoid*bsearch_arg(constvoid*key,constvoid*base,
512+
size_tnmemb,size_tsize,
513+
int (*compar) (constvoid*,constvoid*,void*),
514+
void*arg);
515+
511516
/* port/chklocale.c */
512517
externintpg_get_encoding_from_locale(constchar*ctype,boolwrite_message);
513518

‎src/include/statistics/extended_stats_internal.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ extern intmulti_sort_compare_dims(int start, int end, const SortItem *a,
8585
externintcompare_scalars_simple(constvoid*a,constvoid*b,void*arg);
8686
externintcompare_datums_simple(Datuma,Datumb,SortSupportssup);
8787

88-
externvoid*bsearch_arg(constvoid*key,constvoid*base,
89-
size_tnmemb,size_tsize,
90-
int (*compar) (constvoid*,constvoid*,void*),
91-
void*arg);
92-
9388
externAttrNumber*build_attnums_array(Bitmapset*attrs,int*numattrs);
9489

9590
externSortItem*build_sorted_items(intnumrows,int*nitems,HeapTuple*rows,

‎src/port/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ LIBS += $(PTHREAD_LIBS)
4040
OBJS =\
4141
$(LIBOBJS)\
4242
$(PG_CRC32C_OBJS)\
43+
bsearch_arg.o\
4344
chklocale.o\
4445
erand48.o\
4546
inet_net_ntop.o\

‎src/port/bsearch_arg.c

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* bsearch_arg.c: bsearch variant with a user-supplied pointer
3+
*
4+
* Copyright (c) 2021, PostgreSQL Global Development Group
5+
* Copyright (c) 1990 Regents of the University of California.
6+
* All rights reserved.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions
10+
* are met:
11+
* 1. Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in the
15+
* documentation and/or other materials provided with the distribution.
16+
* 3. [rescinded 22 July 1999]
17+
* 4. Neither the name of the University nor the names of its contributors
18+
* may be used to endorse or promote products derived from this software
19+
* without specific prior written permission.
20+
*
21+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31+
* SUCH DAMAGE.
32+
*
33+
* src/port/bsearch_arg.c
34+
*/
35+
36+
#include"c.h"
37+
38+
/*
39+
* Perform a binary search.
40+
*
41+
* The code below is a bit sneaky. After a comparison fails, we
42+
* divide the work in half by moving either left or right. If lim
43+
* is odd, moving left simply involves halving lim: e.g., when lim
44+
* is 5 we look at item 2, so we change lim to 2 so that we will
45+
* look at items 0 & 1. If lim is even, the same applies. If lim
46+
* is odd, moving right again involes halving lim, this time moving
47+
* the base up one item past p: e.g., when lim is 5 we change base
48+
* to item 3 and make lim 2 so that we will look at items 3 and 4.
49+
* If lim is even, however, we have to shrink it by one before
50+
* halving: e.g., when lim is 4, we still looked at item 2, so we
51+
* have to make lim 3, then halve, obtaining 1, so that we will only
52+
* look at item 3.
53+
*/
54+
void*
55+
bsearch_arg(constvoid*key,constvoid*base0,
56+
size_tnmemb,size_tsize,
57+
int (*compar) (constvoid*,constvoid*,void*),
58+
void*arg)
59+
{
60+
constchar*base= (constchar*)base0;
61+
intlim,
62+
cmp;
63+
constvoid*p;
64+
65+
for (lim=nmemb;lim!=0;lim >>=1)
66+
{
67+
p=base+ (lim >>1)*size;
68+
cmp= (*compar) (key,p,arg);
69+
if (cmp==0)
70+
return (void*)p;
71+
if (cmp>0)
72+
{/* key > p: move right */
73+
base= (constchar*)p+size;
74+
lim--;
75+
}/* else move left */
76+
}
77+
return (NULL);
78+
}

‎src/tools/msvc/Mkvcbuild.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ sub mkvcbuild
103103
dirent.c dlopen.c getopt.c getopt_long.c link.c
104104
pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c
105105
pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c
106-
pqsignal.c mkdtemp.c qsort.c qsort_arg.c quotes.c system.c
106+
pqsignal.c mkdtemp.c qsort.c qsort_arg.cbsearch_arg.cquotes.c system.c
107107
strerror.c tar.c thread.c
108108
win32env.c win32error.c win32security.c win32setlocale.c win32stat.c);
109109

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp