Annotation of parser3/src/lib/sdbm/sdbm_private.h, revision 1.2

1.1       paf         1: /* ====================================================================
                      2:  * The Apache Software License, Version 1.1
                      3:  *
                      4:  * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
                      5:  * reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  *
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  *
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in
                     16:  *    the documentation and/or other materials provided with the
                     17:  *    distribution.
                     18:  *
                     19:  * 3. The end-user documentation included with the redistribution,
                     20:  *    if any, must include the following acknowledgment:
                     21:  *       "This product includes software developed by the
                     22:  *        Apache Software Foundation (http://www.apache.org/)."
                     23:  *    Alternately, this acknowledgment may appear in the software itself,
                     24:  *    if and wherever such third-party acknowledgments normally appear.
                     25:  *
                     26:  * 4. The names "Apache" and "Apache Software Foundation" must
                     27:  *    not be used to endorse or promote products derived from this
                     28:  *    software without prior written permission. For written
                     29:  *    permission, please contact apache@apache.org.
                     30:  *
                     31:  * 5. Products derived from this software may not be called "Apache",
                     32:  *    nor may "Apache" appear in their name, without prior written
                     33:  *    permission of the Apache Software Foundation.
                     34:  *
                     35:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
                     36:  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     37:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     38:  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
                     39:  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     40:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
                     41:  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
                     42:  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
                     43:  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
                     44:  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
                     45:  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     46:  * SUCH DAMAGE.
                     47:  * ====================================================================
                     48:  *
                     49:  * This software consists of voluntary contributions made by many
                     50:  * individuals on behalf of the Apache Software Foundation.  For more
                     51:  * information on the Apache Software Foundation, please see
                     52:  * <http://www.apache.org/>.
                     53:  */
                     54: 
                     55: /*
                     56:  * sdbm - ndbm work-alike hashed database library
                     57:  * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
                     58:  * author: oz@nexus.yorku.ca
                     59:  */
                     60: 
                     61: #ifndef SDBM_PRIVATE_H
                     62: #define SDBM_PRIVATE_H
                     63: 
                     64: #include "apr.h"
                     65: #include "apr_pools.h"
                     66: #include "apr_file_io.h"
                     67: #include "apr_errno.h" /* for apr_status_t */
                     68: 
1.2     ! paf        69: #if 1
1.1       paf        70: /* if the block/page size is increased, it breaks perl apr_sdbm_t compatibility */
                     71: #define DBLKSIZ 16384
                     72: #define PBLKSIZ 8192
                     73: #define PAIRMAX 8008                   /* arbitrary on PBLKSIZ-N */
                     74: #else
                     75: #define DBLKSIZ 4096
                     76: #define PBLKSIZ 1024
                     77: #define PAIRMAX 1008                   /* arbitrary on PBLKSIZ-N */
                     78: #endif
                     79: #define SPLTMAX        10                      /* maximum allowed splits */
                     80: 
                     81: /* for apr_sdbm_t.flags */
                     82: #define SDBM_RDONLY            0x1    /* data base open read-only */
                     83: #define SDBM_SHARED            0x2    /* data base open for sharing */
                     84: #define SDBM_SHARED_LOCK       0x4    /* data base locked for shared read */
                     85: #define SDBM_EXCLUSIVE_LOCK    0x8    /* data base locked for write */
                     86: 
                     87: struct apr_sdbm_t {
                     88:     apr_pool_t *pool;
                     89:     apr_file_t *dirf;                 /* directory file descriptor */
                     90:     apr_file_t *pagf;                 /* page file descriptor */
                     91:     apr_int32_t flags;                /* status/error flags, see below */
                     92:     long maxbno;                      /* size of dirfile in bits */
                     93:     long curbit;                      /* current bit number */
                     94:     long hmask;                               /* current hash mask */
                     95:     long blkptr;                      /* current block for nextkey */
                     96:     int  keyptr;                      /* current key for nextkey */
                     97:     long blkno;                               /* current page to read/write */
                     98:     long pagbno;                      /* current page in pagbuf */
                     99:     char pagbuf[PBLKSIZ];             /* page file block buffer */
                    100:     long dirbno;                      /* current block in dirbuf */
                    101:     char dirbuf[DBLKSIZ];             /* directory file block buffer */
                    102:     int  lckcnt;                       /* number of calls to sdbm_lock */
                    103: };
                    104: 
                    105: extern const apr_sdbm_datum_t sdbm_nullitem;
                    106: 
                    107: long sdbm_hash(const char *str, int len);
                    108: 
                    109: /*
                    110:  * zero the cache
                    111:  */
                    112: #define SDBM_INVALIDATE_CACHE(db, finfo) \
                    113:     do { db->dirbno = (!finfo.size) ? 0 : -1; \
                    114:          db->pagbno = -1; \
                    115:          db->maxbno = (long)(finfo.size * BYTESIZ); \
                    116:     } while (0);
                    117: 
                    118: #endif /* SDBM_PRIVATE_H */

E-mail: