OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [search/] [db_local.h] - Blame information for rev 822

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
/*-
2
 * Copyright (c) 1990, 1993, 1994
3
 *      The Regents of the University of California.  All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. All advertising materials mentioning features or use of this software
14
 *    must display the following acknowledgement:
15
 *      This product includes software developed by the University of
16
 *      California, Berkeley and its contributors.
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
 *      @(#)db.h        8.7 (Berkeley) 6/16/94
34
 * $FreeBSD: src/include/db.h,v 1.5 2002/03/26 01:35:05 bde Exp $
35
 */
36
 
37
#ifndef _DB_H_
38
#define _DB_H_
39
 
40
#include <sys/types.h>
41
#include <sys/cdefs.h>
42
#include <sys/config.h>
43
 
44
#include <limits.h>
45
 
46
#define RET_ERROR       -1              /* Return values. */
47
#define RET_SUCCESS      0
48
#define RET_SPECIAL      1
49
 
50
#define MAX_PAGE_NUMBER 0xffffffff      /* >= # of pages in a file */
51
typedef __uint32_t      pgno_t;
52
#define MAX_PAGE_OFFSET 65535           /* >= # of bytes in a page */
53
typedef __uint16_t      indx_t;
54
#define MAX_REC_NUMBER  0xffffffff      /* >= # of records in a tree */
55
typedef __uint32_t      recno_t;
56
 
57
/* Key/data structure -- a Data-Base Thang. */
58
typedef struct {
59
        void    *data;                  /* data */
60
        size_t   size;                  /* data length */
61
} DBT;
62
 
63
/* Routine flags. */
64
#define R_CURSOR        1               /* del, put, seq */
65
#define __R_UNUSED      2               /* UNUSED */
66
#define R_FIRST         3               /* seq */
67
#define R_IAFTER        4               /* put (RECNO) */
68
#define R_IBEFORE       5               /* put (RECNO) */
69
#define R_LAST          6               /* seq (BTREE, RECNO) */
70
#define R_NEXT          7               /* seq */
71
#define R_NOOVERWRITE   8               /* put */
72
#define R_PREV          9               /* seq (BTREE, RECNO) */
73
#define R_SETCURSOR     10              /* put (RECNO) */
74
#define R_RECNOSYNC     11              /* sync (RECNO) */
75
 
76
typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
77
 
78
/*
79
 * !!!
80
 * The following flags are included in the dbopen(3) call as part of the
81
 * open(2) flags.  In order to avoid conflicts with the open flags, start
82
 * at the top of the 16 or 32-bit number space and work our way down.  If
83
 * the open flags were significantly expanded in the future, it could be
84
 * a problem.  Wish I'd left another flags word in the dbopen call.
85
 *
86
 * !!!
87
 * None of this stuff is implemented yet.  The only reason that it's here
88
 * is so that the access methods can skip copying the key/data pair when
89
 * the DB_LOCK flag isn't set.
90
 */
91
#if UINT_MAX > 65535
92
#define DB_LOCK         0x20000000      /* Do locking. */
93
#define DB_SHMEM        0x40000000      /* Use shared memory. */
94
#define DB_TXN          0x80000000      /* Do transactions. */
95
#else
96
#define DB_LOCK             0x2000      /* Do locking. */
97
#define DB_SHMEM            0x4000      /* Use shared memory. */
98
#define DB_TXN              0x8000      /* Do transactions. */
99
#endif
100
 
101
/* Access method description structure. */
102
typedef struct __db {
103
        DBTYPE type;                    /* Underlying db type. */
104
        int (*close)(struct __db *);
105
        int (*del)(const struct __db *, const DBT *, u_int);
106
        int (*get)(const struct __db *, const DBT *, DBT *, u_int);
107
        int (*put)(const struct __db *, DBT *, const DBT *, u_int);
108
        int (*seq)(const struct __db *, DBT *, DBT *, u_int);
109
        int (*sync)(const struct __db *, u_int);
110
        void *internal;                 /* Access method private. */
111
        int (*fd)(const struct __db *);
112
} DB;
113
 
114
#define BTREEMAGIC      0x053162
115
#define BTREEVERSION    3
116
 
117
/* Structure used to pass parameters to the btree routines. */
118
typedef struct {
119
#define R_DUP           0x01    /* duplicate keys */
120
        u_long  flags;
121
        u_int   cachesize;      /* bytes to cache */
122
        int     maxkeypage;     /* maximum keys per page */
123
        int     minkeypage;     /* minimum keys per page */
124
        u_int   psize;          /* page size */
125
        int     (*compare)      /* comparison function */
126
            (const DBT *, const DBT *);
127
        size_t  (*prefix)       /* prefix function */
128
            (const DBT *, const DBT *);
129
        int     lorder;         /* byte order */
130
} BTREEINFO;
131
 
132
#define HASHMAGIC       0x061561
133
#define HASHVERSION     2
134
 
135
/* Structure used to pass parameters to the hashing routines. */
136
typedef struct {
137
        u_int   bsize;          /* bucket size */
138
        u_int   ffactor;        /* fill factor */
139
        u_int   nelem;          /* number of elements */
140
        u_int   cachesize;      /* bytes to cache */
141
        __uint32_t              /* hash function */
142
                (*hash)(const void *, size_t);
143
        int     lorder;         /* byte order */
144
} HASHINFO;
145
 
146
/* Structure used to pass parameters to the record routines. */
147
typedef struct {
148
#define R_FIXEDLEN      0x01    /* fixed-length records */
149
#define R_NOKEY         0x02    /* key not required */
150
#define R_SNAPSHOT      0x04    /* snapshot the input */
151
        u_long  flags;
152
        u_int   cachesize;      /* bytes to cache */
153
        u_int   psize;          /* page size */
154
        int     lorder;         /* byte order */
155
        size_t  reclen;         /* record length (fixed-length records) */
156
        u_char  bval;           /* delimiting byte (variable-length records */
157
        char    *bfname;        /* btree file name */
158
} RECNOINFO;
159
 
160
/*
161
 * Little endian <==> big endian 32-bit swap macros.
162
 *      M_32_SWAP       swap a memory location
163
 *      P_32_SWAP       swap a referenced memory location
164
 *      P_32_COPY       swap from one location to another
165
 */
166
#define M_32_SWAP(a) {                                                  \
167
        __uint32_t _tmp = a;                                            \
168
        ((char *)&a)[0] = ((char *)&_tmp)[3];                            \
169
        ((char *)&a)[1] = ((char *)&_tmp)[2];                           \
170
        ((char *)&a)[2] = ((char *)&_tmp)[1];                           \
171
        ((char *)&a)[3] = ((char *)&_tmp)[0];                            \
172
}
173
#define P_32_SWAP(a) {                                                  \
174
        __uint32_t _tmp = *(__uint32_t *)a;                             \
175
        ((char *)a)[0] = ((char *)&_tmp)[3];                             \
176
        ((char *)a)[1] = ((char *)&_tmp)[2];                            \
177
        ((char *)a)[2] = ((char *)&_tmp)[1];                            \
178
        ((char *)a)[3] = ((char *)&_tmp)[0];                             \
179
}
180
#define P_32_COPY(a, b) {                                               \
181
        ((char *)&(b))[0] = ((char *)&(a))[3];                           \
182
        ((char *)&(b))[1] = ((char *)&(a))[2];                          \
183
        ((char *)&(b))[2] = ((char *)&(a))[1];                          \
184
        ((char *)&(b))[3] = ((char *)&(a))[0];                           \
185
}
186
 
187
/*
188
 * Little endian <==> big endian 16-bit swap macros.
189
 *      M_16_SWAP       swap a memory location
190
 *      P_16_SWAP       swap a referenced memory location
191
 *      P_16_COPY       swap from one location to another
192
 */
193
#define M_16_SWAP(a) {                                                  \
194
        __uint16_t _tmp = a;                                            \
195
        ((char *)&a)[0] = ((char *)&_tmp)[1];                            \
196
        ((char *)&a)[1] = ((char *)&_tmp)[0];                            \
197
}
198
#define P_16_SWAP(a) {                                                  \
199
        __uint16_t _tmp = *(__uint16_t *)a;                             \
200
        ((char *)a)[0] = ((char *)&_tmp)[1];                             \
201
        ((char *)a)[1] = ((char *)&_tmp)[0];                             \
202
}
203
#define P_16_COPY(a, b) {                                               \
204
        ((char *)&(b))[0] = ((char *)&(a))[1];                           \
205
        ((char *)&(b))[1] = ((char *)&(a))[0];                           \
206
}
207
 
208
__BEGIN_DECLS
209
DB *dbopen(const char *, int, int, DBTYPE, const void *);
210
 
211
#ifdef __DBINTERFACE_PRIVATE
212
DB      *__bt_open(const char *, int, int, const BTREEINFO *, int);
213
DB      *__hash_open(const char *, int, int, const HASHINFO *, int);
214
DB      *__rec_open(const char *, int, int, const RECNOINFO *, int);
215
void     __dbpanic(DB *dbp);
216
#endif
217
__END_DECLS
218
#endif /* !_DB_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.