summaryrefslogtreecommitdiff
path: root/src/mind
diff options
context:
space:
mode:
Diffstat (limited to 'src/mind')
-rw-r--r--src/mind/topology.js49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/mind/topology.js b/src/mind/topology.js
index 8e59c54..576ee83 100644
--- a/src/mind/topology.js
+++ b/src/mind/topology.js
@@ -1,5 +1,7 @@
'use strict';
+import { create } from '../util';
+
const DEFAULT_WEIGHT_MAX = 4;
@@ -18,12 +20,13 @@ const network_proto = {
// create a new network
export function network(input_count, internal_count, output_count, weight_max = 4) {
const count = input_count + internal_count + output_count;
- const n = Object.create(network_proto);
- n.input_count = input_count;
- n.output_count = output_count;
- n.adjacency = new Array(count).fill([]);
- n.weight = [];
- return Object.freeze(n);
+ const n = create({
+ input_count,
+ output_count,
+ adjacency: new Array(count).fill([]),
+ weight: [],
+ }, network_proto);
+ return n;
}
@@ -53,24 +56,22 @@ function network_connect(n, source, sink, weight) {
throw new Error("attempt to use output as source");
}
- const nn = Object.create(network_proto);
- nn.input_count = n.input_count;
- nn.output_count = n.output_count;
- nn.adjacency = n.adjacency.map((row, i) => {
- if (i === source && i === sink) {
- // self-loop
- return [...row, 2];
- } else if (i === source) {
- return [...row, 1];
- } else if (i === sink) {
- return [...row, -1];
- } else {
- return [...row, 0];
- }
- });
- nn.weight = [...n.weight, weight];
-
- return Object.freeze(nn);
+ return create({
+ ...n,
+ adjacency: n.adjacency.map((row, i) => {
+ if (i === source && i === sink) {
+ // self-loop
+ return [...row, 2];
+ } else if (i === source) {
+ return [...row, 1];
+ } else if (i === sink) {
+ return [...row, -1];
+ } else {
+ return [...row, 0];
+ }
+ }),
+ weight: [...n.weight, weight],
+ }, network_proto);
}