blob: 7b2d035fe1594cadf177db2321d1f49680ecdb12 [file] [log] [blame]
/*
* 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