ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/object.h
Revision: 2.16
Committed: Fri Jun 27 06:53:21 2003 UTC (20 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.15: +1 -3 lines
Log Message:
Broke standard.h into rtio.h, rterror.h, rtmath.h, and rtmisc.h

File Contents

# User Rev Content
1 greg 2.16 /* RCSid $Id: object.h,v 2.15 2003/06/26 00:58:09 schorsch Exp $ */
2 greg 1.1 /*
3     * object.h - header file for routines using objects and object sets.
4 greg 2.14 *
5     * Include after "standard.h"
6 greg 2.8 */
7 schorsch 2.13 #ifndef _RAD_OBJECT_H_
8     #define _RAD_OBJECT_H_
9     #ifdef __cplusplus
10     extern "C" {
11     #endif
12 greg 1.1
13 greg 2.8 #ifndef OCTREE
14     #define OCTREE int
15     #endif
16    
17 greg 1.1 /*
18     * Object definitions require general specifications
19     * which may include a number of different argument types.
20     * The following structure aids in the storage of such
21     * argument lists.
22     */
23    
24     typedef struct {
25     short nsargs; /* # of string arguments */
26     short nfargs; /* # of real arguments */
27     char **sarg; /* string arguments */
28 schorsch 2.15 RREAL *farg; /* real arguments */
29 greg 1.1 #ifdef IARGS
30     short niargs; /* # of integer arguments */
31     long *iarg; /* integer arguments */
32     #endif
33     } FUNARGS;
34    
35 greg 1.3 #define MAXSTR 128 /* maximum string length */
36 greg 1.1
37     /*
38     * An object is defined as an index into an array of
39     * structures containing the object type and specification
40     * and the modifier index.
41     */
42    
43 greg 1.4 #ifndef OBJECT
44 greg 2.12 #ifdef SMLMEM
45 greg 2.14 #define OBJECT int16 /* index to object array */
46 greg 2.12 #else
47 greg 2.14 #define OBJECT int32 /* index to object array */
48 greg 1.4 #endif
49     #endif
50 greg 1.1
51     typedef struct {
52     OBJECT omod; /* modifier number */
53     short otype; /* object type number */
54     char *oname; /* object name */
55     FUNARGS oargs; /* object specification */
56     char *os; /* object structure */
57     } OBJREC;
58    
59 greg 1.4 #ifndef MAXOBJBLK
60 greg 2.12 #ifdef SMLMEM
61     #define MAXOBJBLK 63 /* maximum number of object blocks */
62     #else
63 gwlarson 2.5 #define MAXOBJBLK 65535 /* maximum number of object blocks */
64 greg 1.4 #endif
65     #endif
66 greg 1.1
67     extern OBJREC *objblock[MAXOBJBLK]; /* the object blocks */
68 greg 1.2 extern OBJECT nobjects; /* # of objects */
69 greg 1.1
70 gwlarson 2.6 #define OBJBLKSHFT 9
71     #define OBJBLKSIZ (1<<OBJBLKSHFT) /* object block size */
72     #define objptr(obj) (objblock[(obj)>>OBJBLKSHFT]+((obj)&(OBJBLKSIZ-1)))
73 greg 1.1
74     #define OVOID (-1) /* void object */
75     #define VOIDID "void" /* void identifier */
76    
77     /*
78     * Object sets begin with the number of objects and proceed with
79     * the objects in ascending order.
80     */
81    
82 greg 2.11 #define MAXSET 511 /* maximum object set size */
83 greg 2.3
84 greg 2.8 #define setfree(os) free((void *)(os))
85    
86     extern void (*addobjnotify[])(); /* people to notify of new objects */
87 greg 2.3
88 greg 2.8 /* defined in modobject.c */
89 greg 2.10 extern OBJECT objndx(OBJREC *op);
90     extern OBJECT lastmod(OBJECT obj, char *mname);
91     extern OBJECT modifier(char *name);
92     extern OBJECT object(char *oname);
93 greg 2.8 extern void insertobject(OBJECT obj);
94     extern void clearobjndx(void);
95     /* defined in objset.c */
96     extern void insertelem(OBJECT *os, OBJECT obj);
97     extern void deletelem(OBJECT *os, OBJECT obj);
98     extern int inset(OBJECT *os, OBJECT obj);
99     extern int setequal(OBJECT *os1, OBJECT *os2);
100     extern void setcopy(OBJECT *os1, OBJECT *os2);
101     extern OBJECT * setsave(OBJECT *os);
102     extern void setunion(OBJECT *osr, OBJECT *os1, OBJECT *os2);
103     extern void setintersect(OBJECT *osr, OBJECT *os1, OBJECT *os2);
104     extern OCTREE fullnode(OBJECT *oset);
105     extern void objset(OBJECT *oset, OCTREE ot);
106     extern int dosets(int (*f)());
107     extern void donesets(void);
108    
109     /* defined in otypes.c */
110     extern int otype(char *ofname);
111     extern void objerror(OBJREC *o, int etyp, char *msg);
112     /* defined in readfargs.c */
113     extern int readfargs(FUNARGS *fa, FILE *fp);
114     extern void freefargs(FUNARGS *fa);
115     /* defined in readobj.c */
116     extern void readobj(char *inpspec);
117     extern void getobject(char *name, FILE *fp);
118 greg 2.10 extern OBJECT newobject();
119 greg 2.8 extern void freeobjects(int firstobj, int nobjs);
120     /* defined in free_os.c */
121     extern int free_os(OBJREC *op);
122    
123 schorsch 2.13
124     #ifdef __cplusplus
125     }
126     #endif
127     #endif /* _RAD_OBJECT_H_ */
128