Remove/mark some unused functions and parameters
[notion.git] / ioncore / return.c
blob91fc0081dca1fce518b9d8fbeb032d71c5e559d3
1 /*
2 * ion/ioncore/return.h
4 * Copyright (c) Tuomo Valkonen 1999-2009.
6 * See the included file LICENSE for details.
7 */
9 #include <libtu/rb.h>
10 #include <libmainloop/defer.h>
12 #include "common.h"
13 #include "global.h"
14 #include "region.h"
15 #include "pholder.h"
16 #include "return.h"
19 /*{{{ Storage tree */
22 static Rb_node retrb=NULL;
25 /*}}}*/
29 /*{{{ Set */
32 bool region_do_set_return(WRegion *reg, WPHolder *ph)
34 Rb_node node;
36 assert(!OBJ_IS_BEING_DESTROYED(reg));
38 region_unset_return(reg);
40 if(retrb==NULL){
41 retrb=make_rb();
42 if(retrb==NULL)
43 return FALSE;
46 node=rb_insertp(retrb, reg, ph);
48 region_notify_change(reg, ioncore_g.notifies.set_return);
50 return (node!=NULL);
54 WPHolder *region_make_return_pholder(WRegion *reg)
56 WRegion *mgr=region_manager(reg);
58 if(mgr==NULL)
59 return NULL;
61 return region_managed_get_pholder(mgr, reg);
66 extern WPHolder *region_set_return(WRegion *reg)
68 WPHolder *ph=region_make_return_pholder(reg);
70 if(ph!=NULL){
71 if(region_do_set_return(reg, ph))
72 return ph;
73 destroy_obj((Obj*)ph);
76 return NULL;
81 /*}}}*/
84 /*{{{ Get */
86 Rb_node do_find(WRegion *reg)
88 int found=0;
89 Rb_node node;
91 if(retrb==NULL)
92 return NULL;
94 node=rb_find_pkey_n(retrb, reg, &found);
96 return (found ? node : NULL);
100 WPHolder *region_do_get_return(WRegion *reg)
102 Rb_node node=do_find(reg);
104 return (node!=NULL ? (WPHolder*)node->v.val : NULL);
108 WPHolder *region_get_return(WRegion *reg)
110 /* Should managers be scanned? */
111 return region_do_get_return(reg);
115 /*}}}*/
118 /*{{{ Unset */
121 static WPHolder *do_remove_node(Rb_node node)
123 WPHolder *ph=(WPHolder*)node->v.val;
125 rb_delete_node(node);
127 return ph;
131 WPHolder *region_unset_get_return(WRegion *reg)
133 Rb_node node;
135 node=do_find(reg);
137 if(node!=NULL){
138 region_notify_change(reg, ioncore_g.notifies.unset_return);
139 return do_remove_node(node);
140 }else{
141 return NULL;
146 void region_unset_return(WRegion *reg)
148 WPHolder *ph=region_unset_get_return(reg);
150 if(ph!=NULL)
151 mainloop_defer_destroy((Obj*)ph);
155 /*}}}*/
158 /*{{{ Internal Lua exports */
161 EXTL_SAFE
162 EXTL_EXPORT_MEMBER
163 WRegion *region___return_target(WRegion *reg)
165 WPHolder *ph=region_get_return(reg);
166 return (ph!=NULL ? pholder_target(ph) : NULL);
170 /*}}}*/