annotate yetilab/vector/vector.yeti @ 222:77c6a81c577f matrix_opaque_immutable

Move block directory -> vector
author Chris Cannam
date Sat, 11 May 2013 15:58:36 +0100
parents yetilab/block/vector.yeti@709fba377099
children c00d8f7e2708
rev   line source
Chris@47 1
Chris@222 2 module yetilab.vector.vector;
Chris@5 3
Chris@222 4 load yetilab.vector.vectortype;
Chris@9 5
Chris@211 6 import java.util: Arrays;
Chris@26 7
Chris@211 8 //!!! This is supposed to be 100% immutable and without copying when duplicating for read only
Chris@211 9
Chris@211 10 zeros n =
Chris@211 11 new double[n];
Chris@211 12
Chris@211 13 consts m n =
Chris@211 14 (a = zeros n;
Chris@211 15 for [0..n-1] do i:
Chris@211 16 a[i] := m;
Chris@211 17 done;
Chris@211 18 a);
Chris@211 19
Chris@211 20 ones = consts 1.0;
Chris@211 21
Chris@211 22 fromList l is list?<number> -> ~double[] =
Chris@211 23 (arr = array(l);
Chris@211 24 len = length arr;
Chris@211 25 v = zeros len;
Chris@211 26 for [0..len-1] do i:
Chris@211 27 v[i] := arr[i];
Chris@211 28 done;
Chris@211 29 v);
Chris@211 30
Chris@211 31 list' a is ~double[] -> list<number> =
Chris@211 32 list a;
Chris@211 33
Chris@211 34 array' a is ~double[] -> array<number> =
Chris@211 35 array a;
Chris@211 36
Chris@211 37 length' =
Chris@211 38 length . list';
Chris@211 39
Chris@211 40 empty?' =
Chris@211 41 empty? . list';
Chris@211 42
Chris@214 43 at' n v is number -> ~double[] -> number =
Chris@214 44 v[n];
Chris@214 45
Chris@211 46 floats a is ~double[] -> ~float[] =
Chris@211 47 (len = length' a;
Chris@211 48 f = new float[len];
Chris@211 49 for [0..len-1] do i:
Chris@211 50 f[i] := a[i];
Chris@211 51 done;
Chris@211 52 f);
Chris@211 53
Chris@211 54 fromFloats ff is ~float[] -> ~double[] =
Chris@211 55 (len = length (list ff);
Chris@211 56 a = new double[len];
Chris@211 57 for [0..len-1] do i:
Chris@211 58 a[i] := ff[i];
Chris@211 59 done;
Chris@211 60 a);
Chris@211 61
Chris@211 62 equal v1 v2 =
Chris@211 63 list' v1 == list' v2;
Chris@211 64
Chris@211 65 copyOf v is ~double[] -> ~double[] =
Chris@211 66 Arrays#copyOf(v, list' v |> length);
Chris@211 67
Chris@211 68 rangeOf start len v is number -> number -> ~double[] -> ~double[] =
Chris@211 69 Arrays#copyOfRange(v, start, start + len);
Chris@211 70
Chris@211 71 resizedTo n v is number -> ~double[] -> ~double[] =
Chris@211 72 Arrays#copyOf(v, n);
Chris@211 73
Chris@211 74 concat vv is list?<~double[]> -> ~double[] =
Chris@211 75 (len = sum (map length' vv);
Chris@211 76 vout = zeros len;
Chris@211 77 var base = 0;
Chris@211 78 for vv do v:
Chris@211 79 vlen = length' v;
Chris@211 80 for [0..vlen-1] do i: vout[base + i] := v[i] done;
Chris@211 81 base := base + vlen;
Chris@211 82 done;
Chris@211 83 vout);
Chris@208 84
Chris@5 85 {
Chris@211 86 zeros,
Chris@211 87 consts,
Chris@211 88 ones,
Chris@211 89 vector v = v,
Chris@211 90 primitive = copyOf,
Chris@211 91 floats,
Chris@211 92 fromFloats,
Chris@211 93 fromList,
Chris@211 94 list = list',
Chris@211 95 array = array',
Chris@211 96 length = length',
Chris@211 97 empty? = empty?',
Chris@214 98 at = at',
Chris@211 99 equal,
Chris@211 100 rangeOf,
Chris@211 101 resizedTo,
Chris@211 102 concat,
Chris@47 103 } as {
Chris@211 104 zeros is number -> vector,
Chris@211 105 consts is number -> number -> vector,
Chris@211 106 ones is number -> vector,
Chris@211 107 vector is ~double[] -> vector,
Chris@211 108 primitive is vector -> ~double[],
Chris@211 109 floats is vector -> ~float[],
Chris@211 110 fromFloats is ~float[] -> vector,
Chris@211 111 fromList is list?<number> -> vector,
Chris@211 112 list is vector -> list<number>,
Chris@211 113 array is vector -> array<number>,
Chris@211 114 length is vector -> number,
Chris@211 115 empty? is vector -> boolean,
Chris@214 116 at is number -> vector -> number,
Chris@211 117 equal is vector -> vector -> boolean,
Chris@211 118 rangeOf is number -> number -> vector -> vector, //!!! not well-named now vector arg is at the end
Chris@211 119 resizedTo is number -> vector -> vector,
Chris@211 120 concat is list?<vector> -> vector,
Chris@5 121 }
Chris@5 122
Chris@27 123
Chris@47 124