<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Hi list,</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">I've been playing around with the new(ish) [array] object suite in vanilla 0.46.6. Forgive me if this is already a known issue, but it looks like the min and max arguments aren't working properly.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">The second inlet (setting the number of points to search) works as expected. The first inlet doesn't update: it seems to be set to 0 no matter what (although the index outlet is updated, but not as expected).</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">I think I see the problem in x_array.c</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">The max object is defined line 723:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style=""><div class="gmail_default" style="font-family:verdana,sans-serif">typedef struct _array_max</div><div class="gmail_default" style="font-family:verdana,sans-serif">{</div><div class="gmail_default" style="font-family:verdana,sans-serif">    t_array_rangeop x_rangeop;</div><div class="gmail_default" style="font-family:verdana,sans-serif">    t_outlet *x_out1;       /* value */</div><div class="gmail_default" style="font-family:verdana,sans-serif">    t_outlet *x_out2;       /* index */</div><div class="gmail_default" style="font-family:verdana,sans-serif">    int x_onset;            /* search onset */</div><div class="gmail_default" style="font-family:verdana,sans-serif">} t_array_max;</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">And the bang and float methods starting 740:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style=""><div class="gmail_default" style=""><font face="verdana, sans-serif">static void array_max_bang(t_array_max *x)</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">{</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    char *itemp, *firstitem;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    int stride, nitem, i, besti;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    t_float bestf;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    if (!array_rangeop_getrange(&x->x_rangeop, &firstitem, &nitem, &stride))</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">        return;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    for (i = 0, besti = 0, bestf= -1e30, itemp = firstitem;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">        i < nitem; i++, itemp += stride)</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">            if (*(t_float *)itemp > bestf)</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">                bestf = *(t_float *)itemp, besti = i;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    outlet_float(x->x_out2, besti+x->x_onset);</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    outlet_float(x->x_out1, bestf);</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">}</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">static void array_max_float(t_array_max *x, t_floatarg f)</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">{</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    x->x_onset = f;</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">    array_max_bang(x);</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">}</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style=""><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">In the float method it looks like the onset is never actually assigned in the x_rangeop member of the t_array_max struct, so array_rangeop_getrange can't set the firstitem pointer to anything but its init value.</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style=""><br></div><div class="gmail_default" style=""><font face="verdana, sans-serif">Thanks,</font></div><div class="gmail_default" style=""><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style=""><font face="verdana, sans-serif">Matt</font></div></div></div></div>