Skip to content

Commit cb2597d

Browse files
author
Kjerand Pedersen
committed
refactoring
1 parent c94c8ce commit cb2597d

File tree

15 files changed

+348
-255
lines changed

15 files changed

+348
-255
lines changed

src/array.js

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ export function createArray1d(values, columns, initValue) {
44
}
55
if (columns < 1) throw Error('Columns not a number!');
66
const arr = new Array(columns);
7-
8-
for (let c = 0; c < arr.length; c++) {
9-
if (values && c < values.length) {
7+
let c = 0;
8+
if (values) {
9+
const itr = Math.min(values.length, columns);
10+
for (; c < itr; c++) {
1011
arr[c] = values[c];
11-
} else {
12-
arr[c] = initValue;
1312
}
1413
}
14+
for (; c < columns; c++) {
15+
arr[c] = initValue;
16+
}
1517
return arr;
1618
}
1719

@@ -26,47 +28,67 @@ export function createArray2d(values, columns, rows, initValue) {
2628
if (columns < 1) throw Error('Columns not a number!');
2729
rows = rows || 1;
2830
const arr = new Array(rows);
31+
const len = rows * columns;
2932
let i = 0;
30-
for (let r = 0; r < arr.length; r++) {
31-
arr[r] = new Array(columns);
32-
for (let c = 0; c < arr[r].length; c++) {
33-
if (values && i < values.length) {
34-
arr[r][c] = values[i];
35-
} else {
36-
arr[r][c] = initValue;
33+
let r = -1;
34+
if (values) {
35+
const itr = Math.min(len, values.length);
36+
for (; i < itr; i++) {
37+
const c = i % columns;
38+
if (c === 0) {
39+
r++;
40+
arr[r] = new Array(columns);
3741
}
38-
i++;
42+
arr[r][c] = values[i];
3943
}
4044
}
41-
return arr;
42-
}
43-
44-
export function assignTo2d(arr, cb) {
45-
for (let r = 0; r < arr.length; r++) {
46-
for (let c = 0; c < arr[r].length; c++) {
47-
arr[r][c] = cb(arr[r][c], c, r);
45+
for (; i < len; i++) {
46+
const c = i % columns;
47+
if (c === 0) {
48+
r++;
49+
arr[r] = new Array(columns);
4850
}
51+
arr[r][c] = initValue;
4952
}
50-
}
5153

52-
export function assignTo1d(arr, cb) {
53-
for (let c = 0; c < arr.length; c++) {
54-
arr[c] = cb(arr[c], c);
55-
}
54+
// for (let r = 0; r < arr.length; r++) {
55+
// arr[r] = new Array(columns);
56+
// for (let c = 0; c < columns; c++) {
57+
// arr[r][c] = values[i++];
58+
// }
59+
// for (let c = i; c < columns; c++) {
60+
// arr[r][c] = initValue;
61+
// }
62+
// }
63+
return arr;
5664
}
5765

58-
export function copyTo2d(arr, values) {
59-
let i = 0;
60-
for (let r = 0; r < arr.length; r++) {
61-
for (let c = 0; c < arr[0].length && i < values.length; c++) {
62-
arr[r][c] = values[i++];
66+
export function assignTo(arr, cb) {
67+
if (Array.isArray(arr[0])) {
68+
for (let r = 0; r < arr.length; r++) {
69+
for (let c = 0; c < arr[r].length; c++) {
70+
arr[r][c] = cb(arr[r][c], c, r);
71+
}
72+
}
73+
} else {
74+
for (let c = 0; c < arr.length; c++) {
75+
arr[c] = cb(arr[c], c);
6376
}
6477
}
6578
}
6679

67-
export function copyTo1d(arr, values) {
68-
for (let c = 0; c < arr.length && c < values.length; c++) {
69-
arr[c] = values[c];
80+
export function copyTo(arr, values) {
81+
if (Array.isArray(arr[0])) {
82+
let i = 0;
83+
for (let r = 0; r < arr.length; r++) {
84+
for (let c = 0; c < arr[0].length && i < values.length; c++) {
85+
arr[r][c] = values[i++];
86+
}
87+
}
88+
} else {
89+
for (let c = 0; c < arr.length && c < values.length; c++) {
90+
arr[c] = values[c];
91+
}
7092
}
7193
}
7294

@@ -117,13 +139,13 @@ export function removeFrom(arr, i = 0, j = 0) {
117139
}
118140
}
119141

120-
export function clone2d(arr) {
121-
return arr.map(row => row.slice());
142+
export function clone(arr) {
143+
return Array.isArray(arr[0]) ? arr.map(row => row.slice()) : arr.slice();
122144
}
123145

124-
export const rows = arr => arr.length;
146+
export const nrows = arr => arr.length;
125147

126-
export const cols = arr => arr && arr[0].length;
148+
export const ncols = arr => arr && arr[0].length;
127149

128150
export const flatten = (inpArr) => {
129151
const arr = new Array(inpArr.length * inpArr[0].length);

src/math/determinant.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { cols, clone2d, removeFrom } from '../array';
1+
import { ncols, clone, removeFrom } from '../array';
22

33
export default op => function determinant(m) {
44
if (m.length === 1) return m[0][0];
55

66
let d = op.zero();
7-
const ncols = cols(m);
8-
for (let c = 0; c < ncols; c++) {
7+
const cols = ncols(m);
8+
for (let c = 0; c < cols; c++) {
99
const v = m[0][c];
1010
if (op.isZero(v)) continue;
11-
const sm = clone2d(m);
11+
const sm = clone(m);
1212
removeFrom(sm, c + 1, 1);
1313
let cofactor = determinant(sm, op);
1414

src/math/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
// import factory from './factory';
7-
import factory from '../optimalisations/factory';
7+
import factory from '../optimisations/factory';
88

99
const op = factory();
1010
export default op;

src/matrix.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import {
33
determinant2d,
44
determinant3d,
55
determinant4d,
6-
} from './optimalisations/matrix';
6+
} from './optimisations/determinant';
77
import {
88
createArray2d,
9-
assignTo2d,
10-
copyTo2d,
9+
assignTo,
10+
copyTo,
1111
transpose,
1212
subArrayFrom,
1313
removeFrom,
1414
flatten,
15-
clone2d,
15+
clone,
1616
} from './array';
1717
import { argumentsToList } from './utils';
1818
import op from './math';
@@ -27,7 +27,7 @@ export class Matrix {
2727
if (Array.isArray(values[0]) && !cols) {
2828
cols = values[0].length;
2929
rows = values.length;
30-
this._values = clone2d(values);
30+
this._values = clone(values);
3131
} else {
3232
this._values = createArray2d(argumentsToList(values, false), cols, rows, 0);
3333
}
@@ -48,7 +48,7 @@ export class Matrix {
4848
throw Error('Vectors must be of the same dimension!');
4949
}
5050
const m = createArray2d(null, vect.length, l);
51-
assignTo2d(m, (foo, c, r) => vect[c].get(r));
51+
assignTo(m, (foo, c, r) => vect[c].get(r));
5252
return new Matrix(m);
5353
}
5454

@@ -61,9 +61,9 @@ export class Matrix {
6161
[values] = values;
6262
}
6363
if (values.length === 1 && op.isDefined(values[0])) {
64-
assignTo2d(this._values, () => values[0]);
64+
assignTo(this._values, () => values[0]);
6565
} else {
66-
copyTo2d(this._values, argumentsToList(values));
66+
copyTo(this._values, argumentsToList(values));
6767
}
6868
return this;
6969
}
@@ -112,7 +112,7 @@ export class Matrix {
112112
}
113113

114114
clamp(min = 0, max = 1) {
115-
assignTo2d(this._values, v => op.clamp(v, min, max));
115+
assignTo(this._values, v => op.clamp(v, min, max));
116116
return this;
117117
}
118118

@@ -126,7 +126,7 @@ export class Matrix {
126126
args.forEach((m) => {
127127
if (this.rows !== m.rows || this.cols !== m.cols)
128128
throw Error('Matrices must be of same size!');
129-
assignTo2d(this._values, (v, c, r) => op.add(v, m._values[r][c]));
129+
assignTo(this._values, (v, c, r) => op.add(v, m._values[r][c]));
130130
});
131131
return this;
132132
}
@@ -135,7 +135,7 @@ export class Matrix {
135135
args.forEach((m) => {
136136
if (this.rows !== m.rows || this.cols !== m.cols)
137137
throw Error('Matrices must be of same size!');
138-
assignTo2d(this._values, (v, c, r) => op.subtract(v, m._values[r][c]));
138+
assignTo(this._values, (v, c, r) => op.subtract(v, m._values[r][c]));
139139
});
140140
return this;
141141
}
@@ -179,13 +179,13 @@ export class Matrix {
179179

180180
scale(factor) {
181181
if (Number.isFinite(factor)) {
182-
assignTo2d(this._values, v => op.multiply(v, factor));
182+
assignTo(this._values, v => op.multiply(v, factor));
183183
}
184184
return this;
185185
}
186186

187187
negate() {
188-
assignTo2d(this._values, v => op.negate(v));
188+
assignTo(this._values, v => op.negate(v));
189189
return this;
190190
}
191191

src/optimalisations/determinant.js

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/optimalisations/inverse.js

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)