source: trunk/libs/newlib/src/newlib/libc/search/page.h @ 543

Last change on this file since 543 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 3.6 KB
Line 
1/*-
2 * Copyright (c) 1990, 1993, 1994
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Margo Seltzer.
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. All advertising materials mentioning features or use of this software
17 *    must display the following acknowledgement:
18 *      This product includes software developed by the University of
19 *      California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 *    may be used to endorse or promote products derived from this software
22 *    without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 *      @(#)page.h      8.2 (Berkeley) 5/31/94
37 * $FreeBSD: src/lib/libc/db/hash/page.h,v 1.2 2002/03/22 23:41:40 obrien Exp $
38 */
39
40/*
41 * Definitions for hashing page file format.
42 */
43
44/*
45 * routines dealing with a data page
46 *
47 * page format:
48 *      +------------------------------+
49 * p    | n | keyoff | datoff | keyoff |
50 *      +------------+--------+--------+
51 *      | datoff | free  |  ptr  | --> |
52 *      +--------+---------------------+
53 *      |        F R E E A R E A       |
54 *      +--------------+---------------+
55 *      |  <---- - - - | data          |
56 *      +--------+-----+----+----------+
57 *      |  key   | data     | key      |
58 *      +--------+----------+----------+
59 *
60 * Pointer to the free space is always:  p[p[0] + 2]
61 * Amount of free space on the page is:  p[p[0] + 1]
62 */
63
64/*
65 * How many bytes required for this pair?
66 *      2 shorts in the table at the top of the page + room for the
67 *      key and room for the data
68 *
69 * We prohibit entering a pair on a page unless there is also room to append
70 * an overflow page. The reason for this it that you can get in a situation
71 * where a single key/data pair fits on a page, but you can't append an
72 * overflow page and later you'd have to split the key/data and handle like
73 * a big pair.
74 * You might as well do this up front.
75 */
76
77#define PAIRSIZE(K,D)   (2*sizeof(__uint16_t) + (K)->size + (D)->size)
78#define BIGOVERHEAD     (4*sizeof(__uint16_t))
79#define KEYSIZE(K)      (4*sizeof(__uint16_t) + (K)->size);
80#define OVFLSIZE        (2*sizeof(__uint16_t))
81#define FREESPACE(P)    ((P)[(P)[0]+1])
82#define OFFSET(P)       ((P)[(P)[0]+2])
83#define PAIRFITS(P,K,D) \
84        (((P)[2] >= REAL_KEY) && \
85            (PAIRSIZE((K),(D)) + OVFLSIZE) <= FREESPACE((P)))
86#define PAGE_META(N)    (((N)+3) * sizeof(__uint16_t))
87
88typedef struct {
89        BUFHEAD *newp;
90        BUFHEAD *oldp;
91        BUFHEAD *nextp;
92        __uint16_t next_addr;
93}       SPLIT_RETURN;
Note: See TracBrowser for help on using the repository browser.