You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.0 KiB
105 lines
3.0 KiB
4 months ago
|
/*
|
||
|
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of version 2 of the GNU General Public License as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it would be useful, but
|
||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
*
|
||
|
* Further, this software is distributed without any warranty that it is
|
||
|
* free of the rightful claim of any third person regarding infringement
|
||
|
* or the like. Any license provided herein, whether implied or
|
||
|
* otherwise, applies only to this software file. Patent licenses, if
|
||
|
* any, provided herein do not apply to combinations of this program with
|
||
|
* other software, or any other product whatsoever.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License along
|
||
|
* with this program; if not, write the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
*
|
||
|
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
|
||
|
* Mountain View, CA 94043, or:
|
||
|
*
|
||
|
* http://www.sgi.com
|
||
|
*
|
||
|
* For further information regarding this notice, see:
|
||
|
*
|
||
|
* http://oss.sgi.com/projects/GenInfo/NoticeExplan/
|
||
|
*
|
||
|
*/
|
||
|
/* $Id: symbol.h,v 1.1 2000/09/21 21:35:06 alaffin Exp $ */
|
||
|
#ifndef _SYMBOL_H_
|
||
|
#define _SYMBOL_H_
|
||
|
|
||
|
/*
|
||
|
* "Generic" Symbol Table
|
||
|
*
|
||
|
* These data structures are the internal part of a library providing
|
||
|
* an in-memory dbm-like (key, content) database with hierarchical
|
||
|
* key names.
|
||
|
*/
|
||
|
struct sym {
|
||
|
struct sym *next;
|
||
|
char *key;
|
||
|
void *data;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Symbol Table Header
|
||
|
*/
|
||
|
struct symh {
|
||
|
int magic;
|
||
|
struct sym *sym;
|
||
|
struct sym *cursor;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* The "SYM" typedef is the only external data type.
|
||
|
*/
|
||
|
typedef struct symh *SYM;
|
||
|
|
||
|
/*
|
||
|
* Data for keys and contents (lifted from dbopen(3))
|
||
|
* dbopen(3) uses this for all functions, but I'm hard-wired into chars
|
||
|
* for keys and the like; I just need this for sym_get
|
||
|
*/
|
||
|
typedef struct {
|
||
|
void *data;
|
||
|
int size;
|
||
|
} DBT;
|
||
|
|
||
|
/*
|
||
|
* Prototypes
|
||
|
*/
|
||
|
|
||
|
SYM sym_open(int flags, int mode, int openinfo );
|
||
|
int sym_put (SYM sym, char *key, void *data, int flags );
|
||
|
void *sym_get (SYM sym, char *key );
|
||
|
int sym_seq (SYM sym, DBT *key, DBT *data, int flags );
|
||
|
int sym_rm (SYM sym, int flags );
|
||
|
|
||
|
/*
|
||
|
* Flags for sym_put
|
||
|
*/
|
||
|
#define PUT_REPLACE 1 /* replace data on a put */
|
||
|
|
||
|
/*
|
||
|
* Flags for sym_rm
|
||
|
*/
|
||
|
#define RM_KEY 001 /* free() on key pointer */
|
||
|
#define RM_DATA 002 /* free() on data pointer */
|
||
|
|
||
|
/*
|
||
|
* Flags for sym_seq (clones of 44BSD dbopen(3))
|
||
|
*/
|
||
|
#define R_CURSOR 1 /* set "cursor" to where "data" key is */
|
||
|
#define R_FIRST 2 /* set "cursor" to first item */
|
||
|
#define R_NEXT 4 /* set "cursor" to next item */
|
||
|
#define R_LAST 3 /* set "cursor" to last item (UNIMP) */
|
||
|
#define R_PREV 5 /* set "cursor" to previous item (UNIMP) */
|
||
|
|
||
|
#endif
|