#ifndef _OBSERVEUTILS_H
#define _OBSERVEUTILS_H

#include "art.h"
#include "finitemap.h"

extern Bool hat_interrupted;
void ctrlC (int);

/* Some finite maps (i.e. lookup tables). */
extern FiniteMap mapAtom2Info, mapExp2Atom, mapContext2Atom;

/* mapAtom2Info :: FileNode -> Info */
typedef struct {
  FileOffset    node;
  unsigned char arity;
  char*         var;
} Info;
/* mapExp2Atom, mapContext2Atom :: FileNode -> Atom */
typedef struct {
  FileOffset    atom;
  unsigned char arity;
} Atom;


/* Insert into finite maps */
void		insert_mapAtom2Info	(FileOffset atom, char* var
					,unsigned char arity);
void		insert_map2		(FiniteMap map2, FileOffset exp
					,FileOffset atom, unsigned char arity);
/* Routines visible from Haskell world */
void		setObserveContext	(Bool hascontext, Bool rec, int arity
					,char* caller);
FileOffset	lookForFirstApp		(char* callee);
FileOffset	lookForFirstSrc		(int line, int col, char* module);
FileOffset	nextObservation		(FileOffset seen);

/* Internal routines */
FileOffset	varSearch		(void);
FileOffset	srcSearch		(void);
void		searchCAFResult		(FileOffset caf, FileOffset result
					,unsigned char arity
					,FileOffset mostRecentHidden);

#endif


syntax highlighted by Code2HTML, v. 0.9.1