annotate src/samer/units/Stacker.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 /*
samer@0 2 * Copyright (c) 2000, Samer Abdallah, King's College London.
samer@0 3 * All rights reserved.
samer@0 4 *
samer@0 5 * This software is provided AS iS and WITHOUT ANY WARRANTY;
samer@0 6 * without even the implied warranty of MERCHANTABILITY or
samer@0 7 * FITNESS FOR A PARTICULAR PURPOSE.
samer@0 8 */
samer@0 9
samer@0 10 package samer.units;
samer@0 11 import samer.core.*;
samer@0 12 import samer.maths.*;
samer@0 13 import samer.tools.*;
samer@0 14
samer@0 15 /*
samer@0 16 * Takes successive input vectors and stacks them into
samer@0 17 * one big output vector. Requires a task which it will
samer@0 18 * run to obtain each input vector.
samer@0 19 */
samer@0 20
samer@0 21 public class Stacker implements Task
samer@0 22 {
samer@0 23 Node node;
samer@0 24 Task nextvec;
samer@0 25 Vec srcvec;
samer@0 26 int size, step;
samer@0 27 VVector target;
samer@0 28 double [] a, b;
samer@0 29 int k0, k1, k2;
samer@0 30
samer@0 31 public Stacker(Vec v, Task t, int size, int step) { this(v,t,size,step,v.size()); }
samer@0 32 public Stacker(Vec v, Task t, int size, int step, int height)
samer@0 33 {
samer@0 34 node = new Node("stacker");
samer@0 35
samer@0 36 Shell.push(node);
samer@0 37 srcvec=v; nextvec=t;
samer@0 38 this.size = size;
samer@0 39 this.step = step;
samer@0 40
samer@0 41 k0=height;
samer@0 42 k1=step*k0;
samer@0 43 k2=(size-step)*k0;
samer@0 44
samer@0 45 target = new VVector("output",k0*size);
samer@0 46 a = target.array();
samer@0 47 b = srcvec.array();
samer@0 48 Mathx.zero(a);
samer@0 49
samer@0 50 Shell.pop();
samer@0 51 }
samer@0 52
samer@0 53 public void dispose() {
samer@0 54 nextvec.dispose();
samer@0 55 target.dispose();
samer@0 56 a=b=null;
samer@0 57 }
samer@0 58
samer@0 59 public VVector output() { return target; }
samer@0 60
samer@0 61 public void starting() { nextvec.starting(); }
samer@0 62 public void stopping() { nextvec.stopping(); }
samer@0 63 public void run() throws Exception
samer@0 64 {
samer@0 65 // make some room in packed matrix
samer@0 66 System.arraycopy(a,k1,a,0,k2);
samer@0 67
samer@0 68 for (int i=0, j=k2; i<step; i++) {
samer@0 69 nextvec.run();
samer@0 70 // copy vec into packed matrix
samer@0 71 System.arraycopy(b,0,a,j,k0);
samer@0 72 j+=k0;
samer@0 73 }
samer@0 74 target.changed();
samer@0 75 }
samer@0 76 }