ack/util/grind/file.hh

36 lines
1.1 KiB
C++
Raw Normal View History

1990-08-31 18:22:53 +00:00
/* $Header$ */
/* Structure for information about files. This information consists of three
parts:
- file name and directory
- mapping of line numbers to offsets in file
- mapping of object adresses to lines in file and vice versa
*/
#define LOGHSIZ 6 /* make sure HSIZ is a power of 2 */
#define HSIZ (1 << LOGHSIZ)
#define HASH(line) ((line) & (HSIZ-1))
typedef struct file {
struct symbol *f_sym;
1990-09-20 17:51:14 +00:00
struct symbol *f_base;
1990-08-31 18:22:53 +00:00
char *f_fullname; /* name including directory */
struct scope *f_scope; /* reference to scope of this file */
t_lineno f_nlines; /* number of lines in file */
union {
long *ff_linepos; /* positions of lines in file */
struct file *ff_next; /* only for BINCL, EINCL */
} f_x;
#define f_linepos f_x.ff_linepos
#define f_next f_x.ff_next
struct outname *f_line_addr[HSIZ];
/* hash table, mapping line numbers to
outname structures. Collisions are
resolved by chaining:
*/
#define next_outname(n) ((struct outname *) ((n)->on_mptr))
#define setnext_outname(n,m) ((n)->on_mptr = (char *) (m))
} t_file, *p_file;
/* ALLOCDEF "file" 10 */