postgresql/src/backend/lib
Tom Lane 44ed65a545 Avoid use of float arithmetic in bipartite_match.c.
Since the distances used in this algorithm are small integers (not more
than the size of the U set, in fact), there is no good reason to use float
arithmetic for them.  Use short ints instead: they're smaller, faster, and
require no special portability assumptions.

Per testing by Greg Stark, which disclosed that the code got into an
infinite loop on VAX for lack of IEEE-style float infinities.  We don't
really care all that much whether Postgres can run on a VAX anymore,
but there seems sufficient reason to change this code anyway.

In passing, make a few other small adjustments to make the code match
usual Postgres coding style a bit better.
2015-08-23 13:02:18 -04:00
..
Makefile Support GROUPING SETS, CUBE and ROLLUP. 2015-05-16 03:46:31 +02:00
README Fix typos, update README. 2015-01-23 15:06:53 -05:00
binaryheap.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
bipartite_match.c Avoid use of float arithmetic in bipartite_match.c. 2015-08-23 13:02:18 -04:00
hyperloglog.c pgindent run for 9.5 2015-05-23 21:35:49 -04:00
ilist.c Rely on inline functions even if that causes warnings in older compilers. 2015-08-05 18:19:52 +02:00
pairingheap.c Use appendStringInfoString/Char et al where appropriate. 2015-07-02 12:36:03 +03:00
rbtree.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
stringinfo.c Update copyright for 2015 2015-01-06 11:43:47 -05:00

README

This directory contains a general purpose data structures, for use anywhere
in the backend:

binaryheap.c - a binary heap

hyperloglog.c - a streaming cardinality estimator

pairingheap.c - a pairing heap

rbtree.c - a red-black tree

ilist.c - single and double-linked lists.

stringinfo.c - an extensible string type


Aside from the inherent characteristics of the data structures, there are a
few practical differences between the binary heap and the pairing heap. The
binary heap is fully allocated at creation, and cannot be expanded beyond the
allocated size. The pairing heap on the other hand has no inherent maximum
size, but the caller needs to allocate each element being stored in the heap,
while the binary heap works with plain Datums or pointers.

The linked-lists in ilist.c can be embedded directly into other structs, as
opposed to the List interface in nodes/pg_list.h.