cdt.h revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
/***********************************************************************
* *
* This software is part of the BSD package *
*Copyright (c) 1978-2011 The Regents of the University of California an*
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* conditions are met: *
* *
* 1. Redistributions of source code must retain the above *
* copyright notice, this list of conditions and the *
* following disclaimer. *
* *
* 2. Redistributions in binary form must reproduce the above *
* copyright notice, this list of conditions and the *
* materials provided with the distribution. *
* *
* 3. Neither the name of The Regents of the University of California*
* names of its contributors may be used to endorse or *
* promote products derived from this software without *
* specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS *
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED *
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON *
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
* POSSIBILITY OF SUCH DAMAGE. *
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* 1. Redistributions of source code must retain the above copyright *
* notice, this list of conditions and the following disclaimer. *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in *
* distribution. *
* 3. Neither the name of the University nor the names of its *
* contributors may be used to endorse or promote products derived *
* from this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" *
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS *
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT *
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *
* SUCH DAMAGE. *
* *
* Kurt Shoens (UCB) *
* gsf *
* *
***********************************************************************/
#ifndef _CDT_H
#define _CDT_H 1
/*
** Public interface for the dictionary library
**
** Written by Kiem-Phong Vo (07/15/95)
** AT&T Bell Laboratories
*/
/*{KPV: standard definitions */
/* The symbol __STD_C indicates that the language is ANSI-C or C++ */
#ifndef __STD_C
#ifdef __STDC__
#define __STD_C 1
#else
#if __cplusplus || c_plusplus
#define __STD_C 1
#else
#define __STD_C 0
#endif /*__cplusplus*/
#endif /*__STDC__*/
#endif /*__STD_C*/
/* For C++, extern symbols must be protected against name mangling */
#ifndef _BEGIN_EXTERNS_
#if __cplusplus || c_plusplus
#define _BEGIN_EXTERNS_ extern "C" {
#define _END_EXTERNS_ }
#else
#define _BEGIN_EXTERNS_
#define _END_EXTERNS_
#endif
#endif /*_BEGIN_EXTERNS_*/
/* _ARG_ simplifies function prototypes between K&R-C and more modern Cs */
#ifndef _ARG_
#if __STD_C
#define _ARG_(x) x
#else
#define _ARG_(x) ()
#endif
#endif /*_ARG_*/
/* __INLINE__ if defined is the inline keyword */
#if !defined(__INLINE__)
#if defined(__cplusplus)
#define __INLINE__ inline
#else
#define __INLINE__ __inline
#endif/*_WIN32*/
#endif/*__cplusplus*/
#endif/*__INLINE__*/
/* The type Void_t is properly defined so that Void_t* can address any type */
#ifndef Void_t
#if __STD_C
#define Void_t void
#else
#define Void_t char
#endif
#endif /*Void_t*/
/* The NIL() macro simplifies defining nil pointers to a given type */
#ifndef NIL
#endif /*NIL*/
/* For DLLs on systems allowing only pointers across client and library code. */
#ifndef _PTR_
#define _ADR_ /* data access via ptrs only */
#define _PTR_ *
#else
#define _ADR_ & /* normal exporting of data ok */
#define _PTR_
#endif
#endif /*_PTR_*/
#if _KPV_ONLY /* internal code compilation */
#define extern __declspec(dllexport)
#else /* client code compilation */
#define extern __declspec(dllimport)
#endif
#endif
#if __STD_C
#include <stddef.h>
#else
#endif
/*KPV} */
typedef struct _dtmethod_s Dtmethod_t;
struct _dtlink_s
union
{ unsigned long _hash; /* hash value */
} hl;
};
/* private structure to hold an object */
struct _dthold_s
};
/* method to manipulate dictionary structure */
struct _dtmethod_s
int type; /* type of operation */
};
/* stuff that may have to be in shared memory */
struct _dtdata_s
{ int type; /* type of dictionary */
union
} hh;
int ntab; /* number of hash slots */
int size; /* number of objects */
};
/* structure to hold methods that manipulate an object */
struct _dtdisc_s
{ int key; /* where key begins in object */
int size; /* key size */
int link; /* offset to Dtlink_t field */
};
/* the dictionary structure itself */
struct _dt_s
int type; /* type information */
int nview; /* number of parent view dictionaries */
};
/* structure to get status of a dictionary */
struct _dtstat_s
{ int dt_meth; /* method type */
int dt_size; /* number of elements */
int dt_n; /* number of chains or levels */
int dt_max; /* max size of a chain or a level */
int* dt_count; /* counts of chains or levels by size */
};
/* supported storage methods */
/* events */
/* asserts to dtdisc() */
/* types of search - for internal use only */
/* A linear congruential hash: h*127 + c + 987654321 */
#define dtcharhash(h,c) ((((unsigned long)(h))<<7) - ((unsigned long)(h)) + \
((unsigned char)(c)) + 987654321L )
#endif /* _CDT_H */