ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/freeobjmem.c
Revision: 2.7
Committed: Tue Mar 30 16:13:01 2004 UTC (20 years, 1 month ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R7P2, rad3R7P1, rad4R0, rad3R6, rad3R6P1, rad3R8, rad3R9
Changes since 2.6: +15 -10 lines
Log Message:
Continued ANSIfication. There are only bits and pieces left now.

File Contents

# User Rev Content
1 greg 2.1 #ifndef lint
2 schorsch 2.7 static const char RCSid[] = "$Id: freeobjmem.c,v 2.6 2003/07/10 03:47:00 greg Exp $";
3 greg 2.1 #endif
4     /*
5     * Free memory associated with object(s)
6 greg 2.4 *
7     * External symbols declared in ray.h
8 greg 2.1 */
9    
10 greg 2.5 #include "copyright.h"
11 greg 2.4
12     #include "ray.h"
13 greg 2.1 #include "otypes.h"
14 schorsch 2.7 #include "rtotypes.h"
15 greg 2.4 #include "face.h"
16     #include "cone.h"
17     #include "instance.h"
18     #include "data.h"
19     #include "font.h"
20 schorsch 2.7 #include "func.h"
21     #include "mesh.h"
22 greg 2.1
23    
24 schorsch 2.7 extern int
25     free_os( /* free unneeded memory for object */
26     register OBJREC *op
27     )
28 greg 2.1 {
29     if (op->os == NULL)
30     return(0);
31     if (hasfunc(op->otype)) {
32     freefunc(op);
33     return(1);
34     }
35     switch (op->otype) {
36     case OBJ_FACE: /* polygon */
37     freeface(op);
38     return(1);
39     case OBJ_CONE: /* cone */
40     case OBJ_RING: /* disk */
41     case OBJ_CYLINDER: /* cylinder */
42     case OBJ_CUP: /* inverted cone */
43     case OBJ_TUBE: /* inverted cylinder */
44     freecone(op);
45     return(1);
46     case OBJ_INSTANCE: /* octree instance */
47     freeinstance(op);
48 greg 2.6 return(1);
49     case OBJ_MESH: /* mesh instance */
50     freemeshinst(op);
51 greg 2.1 return(1);
52     case PAT_BTEXT: /* monochromatic text */
53     case PAT_CTEXT: /* colored text */
54     case MIX_TEXT: /* mixing text */
55     freetext(op);
56     return(1);
57     case MAT_CLIP: /* clipping surface */
58 greg 2.4 case MAT_SPOT: /* spot light source */
59     free((void *)op->os);
60 greg 2.1 op->os = NULL;
61     return(1);
62 greg 2.4 }
63 greg 2.1 #ifdef DEBUG
64 greg 2.4 objerror(op, WARNING, "cannot free structure");
65 greg 2.1 #endif
66 greg 2.4 return(0);
67 greg 2.1 }
68    
69    
70 schorsch 2.7 extern int
71     free_objs( /* free some object structures */
72     register OBJECT on,
73     OBJECT no
74     )
75 greg 2.1 {
76     int nfreed;
77     register OBJREC *op;
78    
79     for (nfreed = 0; no-- > 0; on++) {
80     op = objptr(on);
81 greg 2.2 if (op->os != NULL)
82 greg 2.1 nfreed += free_os(op);
83     }
84     return(nfreed);
85     }
86    
87    
88 schorsch 2.7 extern void
89     free_objmem(void) /* free all object cache memory */
90 greg 2.1 {
91 greg 2.2 free_objs(0, nobjects);
92 greg 2.1 freedata(NULL);
93     freefont(NULL);
94     }