/*------------------------------------------------------------------------- * * tgRecipe.h-- * Tioga recipe-related definitions and declarations * these functions can be used in both the frontend and the * backend * * to use this header, you must also include * "utils/geo-decls.h" * and "libpq/libpq.h" * * Copyright (c) 1994, Regents of the University of California * * $Id: tgRecipe.h,v 1.3 1997/09/08 02:30:12 momjian Exp $ * *------------------------------------------------------------------------- */ #include "libpq/libpq.h" #ifndef TIOGA_FRONTEND #include "libpq/libpq-be.h" #include "utils/elog.h" #include "utils/geo-decls.h" #else #include "libpq-fe.h" typedef struct { double x, y; } Point; /* this should match whatever is in * * geo-decls.h */ #endif /* TIOGA_FRONTEND */ typedef enum { TG_INGRED, TG_EYE, TG_RECIPE } TgElemType; typedef enum { TG_SQL, TG_C, TG_RECIPE_GRAPH, TG_COMPILED } TgSrcLangType; typedef enum { TG_INGRED_NODE, TG_EYE_NODE, TG_RECIPE_NODE, TG_TEE_NODE /* tee nodes are not stored in the db we * create them when we read the recipe * back */ } TgNodeType; /* -- type definition for setting up in memory Tioga recipe structure -- */ /* -- see 'recipe-schema.sql' for their corresponding database types -- */ typedef char *TgString; typedef struct _tgelement *TgElementPtr; typedef struct _tgnode *TgNodePtr; typedef struct _tgrecipe *TgRecipePtr; /* auto-generated header containing Arr_TgString, Arr_TgElementPtr, and Arr_TgNodePtr */ #include "tioga/Arr_TgRecipe.h" /* C structure representation of a Tioga Element */ typedef struct _tgelement { char *elemName; /* name of function this element represent */ TgElemType elemType; /* type of this element */ Arr_TgString *inPorts; /* names of inputs */ Arr_TgString *inTypes; /* name of input types */ Arr_TgString *outPorts; /* type of output */ Arr_TgString *outTypes; /* name of output types */ char *doc; /* description of this element */ Arr_TgString *keywords; /* keywords used to search for this * element */ char *icon; /* iconic representation */ char *src; /* source code for this element */ TgSrcLangType srcLang; /* source language */ char *owner; /* owner recipe name */ } TgElement; /* C structure representation of a Tioga Node */ typedef struct _tgnode { char *nodeName; /* name of this node */ TgNodeType nodeType; /* type of this node */ Point loc; /* screen location of the node. */ TgElement *nodeElem; /* the underlying element of this node */ Arr_TgNodePtr *inNodes; /* variable array of in node pointers a * NULL TgNodePtr indicates a run-time * parameter */ Arr_TgNodePtr *outNodes; /* variable array of out node pointers. */ } TgNode; /* C structure representation of a Tioga Recipe */ typedef struct _tgrecipe { TgElement elmValue; /* "inherits" TgElement attributes. */ Arr_TgNodePtr *allNodes; /* array of all nodes for this recipe. */ Arr_TgNodePtr *rootNodes; /* array of root nodes for this recipe. -- * root nodes are nodes with no parents */ Arr_TgNodePtr *eyes; /* array of pointers for the browser nodes * recipe, execution of recipe starts by * traversing the recipe C structure from * the eye nodes pointed by these * pointers. */ Arr_TgNodePtr *tees; /* array of pointers of all the tee nodes */ Arr_TgElementPtr *elements; /* array of all the elements in this * recipe, elements may be shared by * multiple nodes */ } TgRecipe; /* functions defined in tgRecipe.c */ extern TgRecipe *retrieveRecipe(char *name); extern TgElement *findElemInRecipe(TgRecipe * r, char *elemName); extern TgNode *findNodeInRecipe(TgRecipe * r, char *nodeName); /* ---- copyXXX functions ---- */ extern void copyTgElementPtr(TgElementPtr *, TgElementPtr *); extern void copyTgNodePtr(TgNodePtr *, TgNodePtr *); extern void copyTgRecipePtr(TgRecipePtr *, TgRecipePtr *); extern void copyTgString(TgString *, TgString *);