~ubuntu-branches/ubuntu/quantal/pd-smlib/quantal

« back to all changes in this revision

Viewing changes to linspace.c

  • Committer: Bazaar Package Importer
  • Author(s): Hans-Christoph Steiner
  • Date: 2010-11-10 15:17:58 UTC
  • Revision ID: james.westby@ubuntu.com-20101110151758-3acjf69kiudo3gh4
Tags: upstream-0.12.1
ImportĀ upstreamĀ versionĀ 0.12.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "defines.h"
 
2
 
 
3
/*--------------- linspace ----------------*/
 
4
/* clips a vector */
 
5
 
 
6
 
 
7
static t_class *linspace_class;
 
8
 
 
9
typedef struct _linspace
 
10
{
 
11
    t_object x_obj;
 
12
        float m_lo;
 
13
        float m_hi;
 
14
        float m_n;
 
15
} t_linspace;
 
16
 
 
17
 
 
18
static void linspace_bang(t_linspace *x)
 
19
{
 
20
        int n;
 
21
        n=(int)x->m_n;
 
22
        if ((n<256)&&(n>1))
 
23
        {
 
24
                int i;
 
25
                float lo,step;
 
26
                t_atom *ap,*app;
 
27
 
 
28
                ap = (t_atom *)getbytes(sizeof(t_atom)*n);
 
29
                app=ap;
 
30
                lo=x->m_lo;
 
31
                step=(x->m_hi-lo)/(n-1);        
 
32
                for (i = 0; i < n; i++)
 
33
                {
 
34
 
 
35
                        SETFLOAT(app, lo);
 
36
                        app++;
 
37
                        lo+=step;
 
38
                }
 
39
                outlet_list(x->x_obj.ob_outlet,gensym("list"),n,ap);
 
40
                freebytes(ap,n);
 
41
        }
 
42
}
 
43
 
 
44
static void linspace_float(t_linspace *x, t_float lo)
 
45
{
 
46
        x->m_lo=lo;
 
47
        linspace_bang(x);
 
48
}
 
49
 
 
50
static void *linspace_new(t_float lo, t_float hi, t_float n)
 
51
{
 
52
        t_linspace *x=(t_linspace *)pd_new(linspace_class);
 
53
 
 
54
    floatinlet_new(&x->x_obj, &x->m_hi);
 
55
    floatinlet_new(&x->x_obj, &x->m_n);
 
56
 
 
57
        outlet_new(&x->x_obj, gensym("list"));
 
58
        x->m_lo=lo;
 
59
        x->m_hi=hi;
 
60
        x->m_n=n;
 
61
        return (void *)x;
 
62
}
 
63
 
 
64
void linspace_setup(void)
 
65
{
 
66
    linspace_class = class_new(gensym("linspace"),
 
67
        (t_newmethod)linspace_new, 0,
 
68
                sizeof(t_linspace), 
 
69
                CLASS_DEFAULT,
 
70
            A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
 
71
    class_addfloat(linspace_class, (t_method)linspace_float);
 
72
    class_addbang(linspace_class, (t_method)linspace_bang);
 
73
}
 
74