Exemple #1
0
// 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, ", ");
        };
    };
};
Exemple #2
0
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, ", ");
    };
};
Exemple #3
0
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__);
};
Exemple #4
0
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);
};