ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/object.h
Revision: 2.22
Committed: Sun May 11 21:37:40 2014 UTC (9 years, 11 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2, rad4R2P2, rad5R0, rad5R1, rad4R2, rad4R2P1, rad5R3
Changes since 2.21: +4 -4 lines
Log Message:
Increased maximum number of objects by a factor of 8 to 255 million

File Contents

# Content
1 /* RCSid $Id: object.h,v 2.21 2013/12/08 19:25:36 greg Exp $ */
2 /*
3 * object.h - header file for routines using objects and object sets.
4 *
5 * Include after "standard.h"
6 */
7 #ifndef _RAD_OBJECT_H_
8 #define _RAD_OBJECT_H_
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 #ifndef OCTREE
14 #define OCTREE int
15 #endif
16
17 /*
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 char **sarg; /* string arguments */
26 RREAL *farg; /* real arguments */
27 short nsargs; /* # of string arguments */
28 short nfargs; /* # of real arguments */
29 #ifdef IARGS
30 short niargs; /* # of integer arguments */
31 long *iarg; /* integer arguments */
32 #endif
33 } FUNARGS;
34
35 #define MAXSTR 512 /* maximum string (word) length */
36
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 #ifndef OBJECT
44 #ifdef SMLMEM
45 #define OBJECT int16 /* index to object array */
46 #else
47 #define OBJECT int32 /* index to object array */
48 #endif
49 #endif
50
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 #ifndef MAXOBJBLK
60 #ifdef SMLMEM
61 #define MAXOBJBLK 1023 /* maximum number of object blocks */
62 #else
63 #define MAXOBJBLK 131071 /* maximum number of object blocks */
64 #endif
65 #endif
66
67 extern OBJREC *objblock[MAXOBJBLK]; /* the object blocks */
68 extern OBJECT nobjects; /* # of objects */
69
70 #define OBJBLKSHFT 11
71 #define OBJBLKSIZ (1<<OBJBLKSHFT) /* object block size */
72 #define objptr(obj) (objblock[(obj)>>OBJBLKSHFT]+((obj)&(OBJBLKSIZ-1)))
73
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 #define MAXSET 511 /* maximum object set size */
83
84 #define setfree(os) free((void *)(os))
85
86 extern void (*addobjnotify[])(); /* people to notify of new objects */
87
88 /* defined in modobject.c */
89 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 extern int eqreal(double d1, double d2);
94 extern int eqobjects(OBJECT obj1, OBJECT obj2);
95 extern void insertobject(OBJECT obj);
96 extern void clearobjndx(void);
97 /* defined in objset.c */
98 extern void insertelem(OBJECT *os, OBJECT obj);
99 extern void deletelem(OBJECT *os, OBJECT obj);
100 extern int inset(OBJECT *os, OBJECT obj);
101 extern int setequal(OBJECT *os1, OBJECT *os2);
102 extern void setcopy(OBJECT *os1, OBJECT *os2);
103 extern OBJECT * setsave(OBJECT *os);
104 extern void setunion(OBJECT *osr, OBJECT *os1, OBJECT *os2);
105 extern void setintersect(OBJECT *osr, OBJECT *os1, OBJECT *os2);
106 extern OCTREE fullnode(OBJECT *oset);
107 extern void objset(OBJECT *oset, OCTREE ot);
108 extern int dosets(int (*f)());
109 extern void donesets(void);
110
111 /* defined in otypes.c */
112 extern int otype(char *ofname);
113 extern void objerror(OBJREC *o, int etyp, char *msg);
114 /* defined in readfargs.c */
115 extern int readfargs(FUNARGS *fa, FILE *fp);
116 extern void freefargs(FUNARGS *fa);
117 /* defined in readobj.c */
118 extern void readobj(char *inpspec);
119 extern void getobject(char *name, FILE *fp);
120 extern OBJECT newobject(void);
121 extern void freeobjects(int firstobj, int nobjs);
122 /* defined in free_os.c */
123 extern int free_os(OBJREC *op);
124
125
126 #ifdef __cplusplus
127 }
128 #endif
129 #endif /* _RAD_OBJECT_H_ */
130