From eb03b3a341f3c8152db4ee2ee99b85cffb27796e Mon Sep 17 00:00:00 2001 From: sanine-a Date: Tue, 1 Aug 2023 17:40:53 -0500 Subject: add util.js --- src/mind/topology.js | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) (limited to 'src/mind') 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); } -- cgit v1.2.1