Sha256: e64d80d0e50c52e88f90c729f688a8535c9adc3b5f00f94f67eb2b6061bfcb38

Contents?: true

Size: 1.64 KB

Versions: 10

Compression:

Stored size: 1.64 KB

Contents

static void
<%=c_iter%>(na_loop_t *const lp)
{
    size_t  n;
    size_t  p1, p3;
    ssize_t s1, s3;
    size_t *idx1, *idx3;
    int     o1, l1, r1, len;
    BIT_DIGIT *a1, *a3;
    BIT_DIGIT  x;

    INIT_COUNTER(lp, n);
    INIT_PTR_BIT_IDX(lp, 0, a3, p3, s3, idx3);
    INIT_PTR_BIT_IDX(lp, 1, a1, p1, s1, idx1);
    if (s1!=1 || s3!=1 || idx1 || idx3) {
        for (; n--;) {
            LOAD_BIT_STEP(a1, p1, s1, idx1, x);
            STORE_BIT_STEP(a3, p3, s3, idx3, x);
        }
    } else {
        o1 =  p1 % NB;
        o1 -= p3;
        l1 =  NB+o1;
        r1 =  NB-o1;
        if (p3>0 || n<NB) {
            len = NB - p3;
            if ((int)n<len) len=n;
            if (o1>=0) x = *a1>>o1;
            else       x = *a1<<-o1;
            if (p1+len>NB)  x |= *(a1+1)<<r1;
            a1++;
            *a3 = (x & (SLB(len)<<p3)) | (*a3 & ~(SLB(len)<<p3));
            a3++;
            n -= len;
        }
        if (o1==0) {
            for (; n>=NB; n-=NB) {
                x = *(a1++);
                *(a3++) = x;
            }
        } else {
            for (; n>=NB; n-=NB) {
                x = *a1>>o1;
                if (o1<0)  x |= *(a1-1)>>l1;
                if (o1>0)  x |= *(a1+1)<<r1;
                a1++;
                *(a3++) = x;
            }
        }
        if (n>0) {
            x = *a1>>o1;
            if (o1<0)  x |= *(a1-1)>>l1;
            *a3 = (x & SLB(n)) | (*a3 & BALL<<n);
        }
    }
}

static VALUE
<%=c_func(:nodef)%>(VALUE self, VALUE obj)
{
    ndfunc_arg_in_t ain[2] = {{OVERWRITE,0},{Qnil,0}};
    ndfunc_t ndf = {<%=c_iter%>, FULL_LOOP, 2,0, ain,0};

    na_ndloop(&ndf, 2, self, obj);
    return self;
}

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
numo-narray-0.9.1.4 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.1.3 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.1.2 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.1.1 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.1.0 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.0.9 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.0.8 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.0.7 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.0.6 ext/numo/narray/gen/tmpl_bit/store_bit.c
numo-narray-0.9.0.5 ext/numo/narray/gen/tmpl_bit/store_bit.c