Repository URL to install this package:
Version:
7.26.0-0.2 ▾
|
#ifndef SCHEMA_H
#define SCHEMA_H
/** **********************************************************************
** Module: Schema \file schema.h
** Description: This module implements the Schema abstraction, which
** basically amounts to a named symbol table.
** Constants:
** SCHEMA_NULL - the null schema
**
************************************************************************/
/*
* This software was developed by U.S. Government employees as part of
* their official duties and is not subject to copyright.
*
* $Log: schema.h,v $
* Revision 1.11 1997/02/25 19:49:01 dar
* added Rename::userdata
*
* Revision 1.10 1997/01/21 19:17:11 dar
* made C++ compatible
*
* Revision 1.9 1996/02/14 22:22:24 sauderd
* Included scope.h more than once so I removed the 2nd one.
*
* Revision 1.8 1995/04/05 13:55:40 clark
* CADDETC preval
*
* Revision 1.7 1994/05/11 19:51:05 libes
* numerous fixes
*
* Revision 1.6 1993/10/15 18:48:24 libes
* CADDETC certified
*
* Revision 1.5 1993/01/19 22:16:43 libes
* *** empty log message ***
*
* Revision 1.4 1992/08/27 23:42:33 libes
* *** empty log message ***
*
* Revision 1.3 1992/08/18 17:12:41 libes
* rm'd extraneous error messages
*
* Revision 1.2 1992/06/08 18:06:24 libes
* prettied up interface to print_objects_when_running
*/
/*****************/
/* packages used */
/*****************/
#include <sc_export.h>
#include "expbasic.h" /* get basic definitions */
#include "symbol.h"
#include "scope.h"
/****************/
/* modules used */
/****************/
#include "alg.h"
#include "dict.h"
#include "entity.h"
#include "linklist.h"
/***************************/
/* hidden type definitions */
/***************************/
enum rename_type { use, ref };
typedef struct Rename {
struct Symbol_ * schema_sym;
Schema schema;
struct Symbol_ * old;
struct Symbol_ * nnew;
Generic object; /**< once object has been looked up */
char type; /**< drat, need to remember this once renames have been
* resolved to avoid looking them up in the dictionary again */
enum rename_type rename_type;
int userdata; /**< generic for user */
} Rename;
struct Schema_ {
Linked_List rules;
Linked_List reflist;
Linked_List uselist;
/** \var refdict, usedict
* dictionarys into which are entered renames for each specific
* object specified in a rename clause (even if it uses the same
* name */
Dictionary refdict;
Dictionary usedict;
Linked_List use_schemas; /**< lists of schemas that are fully use'd
* entries can be 0 if schemas weren't found during RENAMEresolve */
Linked_List ref_schemas; /**< lists of schemas that are fully ref'd
* entries can be 0 if schemas weren't found during RENAMEresolve */
};
/********************/
/* global variables */
/********************/
extern SC_EXPRESS_EXPORT struct freelist_head REN_fl;
extern SC_EXPRESS_EXPORT struct freelist_head SCOPE_fl;
extern SC_EXPRESS_EXPORT struct freelist_head SCHEMA_fl;
extern SC_EXPRESS_EXPORT int __SCOPE_search_id;
/******************************/
/* macro function definitions */
/******************************/
#define SCHEMAget_name(schema) SCOPEget_name(schema)
#define SCHEMAget_symbol(schema) SCOPEget_symbol(schema)
#define REN_new() (struct Rename *)MEM_new(&REN_fl)
#define REN_destroy(x) MEM_destroy(&REN_fl,(Freelist *)(Generic)x)
#define SCOPE_new() (struct Scope_ *)MEM_new(&SCOPE_fl)
#define SCOPE_destroy(x) MEM_destroy(&SCOPE_fl,(Freelist *)(Generic)x)
#define SCHEMA_new() (struct Schema_ *)MEM_new(&SCHEMA_fl)
#define SCHEMA_destroy(x) MEM_destroy(&SCHEMA_fl,(Freelist *)(Generic)x)
/* the following is simply to make the resulting code easier to read */
/* otherwise, you'd see "entity->superscope" even when you KNOW */
/* it is a schema */
#define ENTITYget_schema(e) (e)->superscope
/***********************/
/* function prototypes */
/***********************/
extern SC_EXPRESS_EXPORT Variable VARfind PROTO( ( Scope, char *, int ) );
extern SC_EXPRESS_EXPORT Schema SCHEMAcreate PROTO( ( void ) );
extern SC_EXPRESS_EXPORT void SCHEMAinitialize PROTO( ( void ) );
extern SC_EXPRESS_EXPORT void SCHEMAadd_use PROTO( ( Schema, Symbol *, Symbol *, Symbol * ) );
extern SC_EXPRESS_EXPORT void SCHEMAadd_reference PROTO( ( Schema, Symbol *, Symbol *, Symbol * ) );
extern SC_EXPRESS_EXPORT void SCHEMAdefine_use PROTO( ( Schema, Rename * ) );
extern SC_EXPRESS_EXPORT void SCHEMAdefine_reference PROTO( ( Schema, Rename * ) );
extern SC_EXPRESS_EXPORT Generic SCHEMAfind PROTO( ( Schema, char * name, int search_refs ) );
extern SC_EXPRESS_EXPORT Scope SCOPEcreate PROTO( ( char ) );
extern SC_EXPRESS_EXPORT Scope SCOPEcreate_tiny PROTO( ( char ) );
extern SC_EXPRESS_EXPORT Scope SCOPEcreate_nostab PROTO( ( char ) );
extern SC_EXPRESS_EXPORT void SCOPEdestroy PROTO( ( Scope ) );
extern SC_EXPRESS_EXPORT Linked_List SCHEMAget_entities_use PROTO( ( Scope ) );
extern SC_EXPRESS_EXPORT Linked_List SCHEMAget_entities_ref PROTO( ( Scope ) );
#endif /* SCHEMA_H */