// FIXME: how to join these two functions into one? void set_of_doubles_to_string (rbtree *t, strbuf *out, unsigned limit) { unsigned doubles_cnt=rbtree_count(t); if (doubles_cnt<limit) { rbtree_node *max=rbtree_maximum(t); for (rbtree_node *j=rbtree_minimum(t); j; j=rbtree_succ(j)) { strbuf_addf (out, "%.1f", *(double*)j->key); if (j!=max) strbuf_addstr (out, ", "); }; } else { unsigned chunk_size=limit/2; int i; rbtree_node *j; for (i=0, j=rbtree_minimum(t); i<chunk_size; j=rbtree_succ(j), i++) { strbuf_addf (out, "%.1f", *(double*)j->key); if (i+1 != chunk_size) strbuf_addstr (out, ", "); }; strbuf_addf (out, " (%d doubles skipped) ", doubles_cnt - chunk_size*2); rbtree_node *n=rbtree_maximum(t); for (int i=0; i<(chunk_size-1); i++) n=rbtree_pred(n); for (int i=0; i<chunk_size; n=rbtree_succ(n), i++) { strbuf_addf (out, "%.1f", *(double*)n->key); if (i+1 != chunk_size) strbuf_addstr (out, ", "); }; }; };
void set_of_string_to_string (rbtree *t, strbuf *out, unsigned limit) { unsigned strings_cnt=rbtree_count(t); unsigned strings_dumped=0; rbtree_node *max=rbtree_maximum(t); for (rbtree_node *j=rbtree_minimum(t); j; j=rbtree_succ(j)) { strbuf_addstr (out, (char*)j->key); if (strings_dumped++>limit) { strbuf_addf (out, " (%d strings skipped)", strings_cnt - strings_dumped); break; }; if (j!=max) strbuf_addstr (out, ", "); }; };
void set_or_update_all_DRx_breakpoints(process *p) { if (utils_c_debug) L ("%s() begin\n", __func__); // enum all breakpoints, pick out a->resolved ones for (unsigned DRx_no=0; DRx_no<4; DRx_no++) { BP *bp=breakpoints[DRx_no]; if (bp) { //L ("%s() DRx_breakpoints[%d]=0x%p\n", __func__, DRx_no, bp); } else { if (utils_c_debug) L ("%s() breakpoints[%d]==NULL\n", __func__, DRx_no); continue; }; //dump_BP (bp); if (bp->a->resolved==false) { if (utils_c_debug) L ("%s() breakpoints[%d]->a->resolved==false\n", __func__, DRx_no); continue; }; if (load_filename && p->we_are_loading_and_OEP_was_executed==false) { if (utils_c_debug) L ("%s() p->we_are_loading_and_OEP_was_executed==false\n", __func__); continue; }; for (struct rbtree_node_t *_t=rbtree_minimum(p->threads); _t; _t=rbtree_succ(_t)) { thread *t=(thread*)(_t->value); set_or_update_DRx_for_thread (t, bp, DRx_no); }; }; if (utils_c_debug) L ("%s() end\n", __func__); };
void MC_MemoryCache_dtor(MemoryCache *mc, bool check_unflushed_elements) { struct rbtree_node_t *i; if (check_unflushed_elements) { for (i=rbtree_minimum(mc->_cache); i!=NULL; i=rbtree_succ(i)) { MemoryCacheElement *v=(MemoryCacheElement*)i->value; if (v->to_be_flushed) { printf ("%s(): there are still elements to be flushed!\n", __FUNCTION__); oassert(0); }; }; }; rbtree_foreach(mc->_cache, NULL, NULL, dfree); rbtree_deinit(mc->_cache); DFREE (mc); };