Filling in branch from trunk
[blender.git] / intern / memutil / MEM_CacheLimiterC-Api.h
1 /**
2  *
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * Contributor(s): Peter Schlaile <peter@schlaile.de> 2005
23  *
24  * ***** END GPL/BL DUAL LICENSE BLOCK *****
25  */
26
27 #ifndef __MEM_cache_limiter_c_api_h_included__
28 #define __MEM_cache_limiter_c_api_h_included__ 1
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33         
34 struct MEM_CacheLimiter_s;
35 struct MEM_CacheLimiterHandle_s;
36
37 typedef struct MEM_CacheLimiter_s MEM_CacheLimiterC;
38 typedef struct MEM_CacheLimiterHandle_s MEM_CacheLimiterHandleC;
39
40 /* function used to remove data from memory */
41 typedef void(*MEM_CacheLimiter_Destruct_Func)(void*);
42
43 #ifndef __MEM_cache_limiter_h_included__
44 extern void MEM_CacheLimiter_set_maximum(int m);
45 extern int MEM_CacheLimiter_get_maximum();
46 #endif
47 /** 
48  * Create new MEM_CacheLimiter object 
49  * managed objects are destructed with the data_destructor
50  *
51  * @param data_destructor
52  * @return A new MEM_CacheLimter object
53  */
54
55 extern MEM_CacheLimiterC * new_MEM_CacheLimiter(
56         MEM_CacheLimiter_Destruct_Func data_destructor);
57
58 /** 
59  * Delete MEM_CacheLimiter
60  * 
61  * Frees the memory of the CacheLimiter but does not touch managed objects!
62  *
63  * @param This "This" pointer
64  */
65
66 extern void delete_MEM_CacheLimiter(MEM_CacheLimiterC * This);
67
68 /** 
69  * Manage object
70  * 
71  * @param This "This" pointer, data data object to manage
72  * @return CacheLimiterHandle to ref, unref, touch the managed object
73  */
74         
75 extern MEM_CacheLimiterHandleC * MEM_CacheLimiter_insert(
76         MEM_CacheLimiterC * This, void * data);
77
78 /** 
79  * Free objects until memory constraints are satisfied
80  * 
81  * @param This "This" pointer
82  */
83
84 extern void MEM_CacheLimiter_enforce_limits(MEM_CacheLimiterC * This);
85
86 /** 
87  * Unmanage object previously inserted object. 
88  * Does _not_ delete managed object!
89  * 
90  * @param This "This" pointer, handle of object
91  */
92         
93 extern void MEM_CacheLimiter_unmanage(MEM_CacheLimiterHandleC * handle);
94
95
96 /** 
97  * Raise priority of object (put it at the tail of the deletion chain)
98  * 
99  * @param handle of object
100  */
101         
102 extern void MEM_CacheLimiter_touch(MEM_CacheLimiterHandleC * handle);
103
104 /** 
105  * Increment reference counter. Objects with reference counter != 0 are _not_
106  * deleted.
107  * 
108  * @param handle of object
109  */
110         
111 extern void MEM_CacheLimiter_ref(MEM_CacheLimiterHandleC * handle);
112
113 /** 
114  * Decrement reference counter. Objects with reference counter != 0 are _not_
115  * deleted.
116  * 
117  * @param handle of object
118  */
119         
120 extern void MEM_CacheLimiter_unref(MEM_CacheLimiterHandleC * handle);
121
122 /** 
123  * Get reference counter.
124  * 
125  * @param This "This" pointer, handle of object
126  */
127         
128 extern int MEM_CacheLimiter_get_refcount(MEM_CacheLimiterHandleC * handle);
129
130 /** 
131  * Get pointer to managed object
132  * 
133  * @param handle of object
134  */
135         
136 extern void * MEM_CacheLimiter_get(MEM_CacheLimiterHandleC * handle);
137
138 #ifdef __cplusplus
139 }
140 #endif
141
142
143 #endif
144