void gameobj::del_objs_loop(node *p) { if(p->objn != NULL) del_objs_loop(p->objn); /* if(p->type >= 0 && p->type < typenum) { objnum[p->y][p->x][p->type]--; objtotal[p->type]--; }*/ del_obj(p); }
/**************************************** ** basic function *****************************************/ static void destroy(btree_t *thiz) { if (thiz->hdr != NULL && thiz->hdr->map_buf != NULL) { munmap(thiz->hdr->map_buf, thiz->hdr->map_size); } close(thiz->wfd); close(thiz->rfd); del_obj(thiz); }
void delete_obj(void *obj){ if(obj==NULL) return; object* o=(object*)obj; printf("delete obj="); print_obj(o); println(); if(o->type==CONS){ del_objs(o->obj,2); }else if(o->type==PROC){ del_objs(o->obj,3); }else{ // del_objs(o->obj,1); } del_obj(o); }
void spark_selfkill(obj *o) // время жизни кончилось { int i; evt *e,*de; lnk *l,*dl; obj *co; if(o->pl->tag==T_WORLD) loc_obj_unreg(o); co=o->bo; while(co!=NULL) { spark_selfkill(co); co=o->bo; } // удаляю очередь событий e=o->bevt; if(e!=NULL) e=e->next; while(e!=NULL) { de=e->next; del_evt(o,e); free_evt(o,e); e=de; } e=o->bevt; if(e!=NULL) { del_evt(o,e); free_evt(o,e); } // удаляю список ссылок на зависимые события for(i=0;i<ELST_NUM;i++) while(o->elst[i]!=NULL) { l=dl=o->elst[i]; o->elst[i]=l->next; if(dl->l==l) { if(l->e->e!=NULL) l->e->e->e=NULL; free_evt(o,l->e); evt_lnk_del(l); } else { while(dl->l!=l) dl=dl->l; dl->l=l->l; if(l->e!=NULL) { dl->e=l->e; l->e->l=dl; evt_lnk_del(l); } } } // удаляю буферы if(o->mem!=NULL) myfree(o->mem); // удаляю объект del_obj(o); free_obj(o); }
void gameobj::del_point_obj() { node *p = point; point = point->fieldp; del_obj(p); }
/**************************************** ** basic function *****************************************/ static void destroy(T *thiz) { del_obj(thiz); }