Example #1
0
static void
test_hash()
{
	char **p;
	struct dn_ht *h;
	uintptr_t x = 0;
	uintptr_t x1 = 0;

	/* first, find and allocate */
	h = dn_ht_init(NULL, 10, 0, hf, matchf, newfn);

	for (p = strings; *p; p++) {
		dn_ht_find(h, (uintptr_t)*p, DNHT_INSERT, NULL);
	}
	dn_ht_scan(h, doprint, 0);
	printf("/* second -- find without allocate */\n");
	h = dn_ht_init(NULL, 10, 0, hf, matchf, NULL);
	for (p = strings; *p; p++) {
		void **y = newfn((uintptr_t)*p, 0, NULL);
		if (x == 0)
			x = (uintptr_t)y;
		else {
			if (x1 == 0)
				x1 = (uintptr_t)*p;
		}
		dn_ht_find(h, (uintptr_t)y, DNHT_INSERT | DNHT_KEY_IS_OBJ, NULL);
	}
	dn_ht_scan(h, doprint, 0);
	printf("remove %p gives %p\n", (void *)x,
		dn_ht_find(h, x, DNHT_KEY_IS_OBJ | DNHT_REMOVE, NULL));
	printf("remove %p gives %p\n", (void *)x,
		dn_ht_find(h, x, DNHT_KEY_IS_OBJ | DNHT_REMOVE, NULL));
	printf("remove %p gives %p\n", (void *)x,
		dn_ht_find(h, x1, DNHT_REMOVE, NULL));
	printf("remove %p gives %p\n", (void *)x,
		dn_ht_find(h, x1, DNHT_REMOVE, NULL));
	dn_ht_scan(h, doprint, 0);
}
Example #2
0
static void *riddle_new(t_symbol *s, int ac, t_atom *av)
{
    /* IFBUILTIN remove: this is a bad hack */
    t_pd *en = riddle_getenvironment();
    t_newgimme newfn = (t_newgimme)zgetfn(en, s);
    if (!newfn)
    {
        loudbug_bug("riddle_new 1");
        return (0);
    }
    else
    {
        t_riddle *rd = (t_riddle *)newfn(s, ac, av);
        int i, nslots;
        t_rdsource *inslot;
        t_rdsink *outslot;
        t_rdremote *re;
        if (!rd)
            return (0);

        rd->rd_private = getbytes(sizeof(*rd->rd_private));

        rd->rd_disabled = 0;
        rd->rd_wasdisabled = 0;
        rd->rd_blockfn = (t_rdblockfn)zgetfn((t_pd *)rd, gensym("dspblock"));
        rd->rd_dspfn = (t_rddspfn)zgetfn((t_pd *)rd, gensym("_dsp"));
        if (!rd->rd_dspfn)
            loudbug_bug("riddle_new 2");

        rd->rd_graphsr = (int)sys_getsr();
        rd->rd_graphblock = sys_getblksize();
        rd->rd_nsiginlets = obj_nsiginlets((t_object *)rd);
        rd->rd_nsigoutlets = obj_nsigoutlets((t_object *)rd);

        /* currently, rd_nremoteslots is incremented in rdbuffer_newreader(),
           which relies on calloc in pd_new(), LATER rethink */

        nslots = rd->rd_nsiginlets + rd->rd_nremoteslots;
        rd->rd_inslots = getbytes(nslots * sizeof(*rd->rd_inslots));
        for (i = 0, inslot = rd->rd_inslots; i < nslots; i++, inslot++)
        {
            inslot->so_riddle = rd;
            inslot->so_remote = 0;
            inslot->so_sourcecount = 0;
            inslot->so_pattern = 0;
            inslot->so_newpattern = 0;
            inslot->so_block = 0;
            inslot->so_newblock = 0;
            inslot->so_flags = 0;
        }
        rd->rd_remoteslots = rd->rd_inslots + rd->rd_nsiginlets;

        for (i = 0, inslot = rd->rd_remoteslots, re = rd->rd_remoteports;
                i < rd->rd_nremoteslots; i++, inslot++)
        {
            if (re = rdremote_nextreader(re))
                inslot->so_remote = re;
            else
            {
                loudbug_bug("riddle_new 3");
                break;  /* FIXME this is fatal */
            }
        }

        rd->rd_outslots =
            getbytes(rd->rd_nsigoutlets * sizeof(*rd->rd_outslots));
        for (i = 0, outslot = rd->rd_outslots;
                i < rd->rd_nsigoutlets; i++, outslot++)
        {
            outslot->si_riddle = rd;
            outslot->si_outno = -1;
            outslot->si_pattern = 0;
            outslot->si_block = 0;
            outslot->si_flags = 0;
            outslot->si_outbuf[0].a_type = A_FLOAT;
            outslot->si_outbuf[1].a_type = A_SYMBOL;
            outslot->si_outbuf[1].a_w.w_symbol = rdps__;
            outslot->si_outbuf[2].a_type = A_FLOAT;
            outslot->si_outbuf[3].a_type = A_FLOAT;
            outslot->si_outbuf[3].a_w.w_float = 0.;
            outslot->si_feedchain = 0;
            outslot->si_isready = 0;
        }

        riddle_validatesinks(rd);

        for (i = 0, outslot = rd->rd_outslots;
                i < rd->rd_nsigoutlets; i++, outslot++)
            if (outslot->si_outno >= 0)
                outslot->si_feedchain = rdfeedchain_new(outslot->si_outno);

        rd->rd_idlepicker = rdpicker_attach(rd, gensym("_idle"));

        return (rd);
    }
}