diff --git a/core/src/main/java/network/aika/Model.java b/core/src/main/java/network/aika/Model.java index 9aebdd201..876598d81 100644 --- a/core/src/main/java/network/aika/Model.java +++ b/core/src/main/java/network/aika/Model.java @@ -41,7 +41,7 @@ public class Model implements Writable { private long N = 0; - private SuspensionCallback suspensionCallback; + public SuspensionCallback suspensionCallback; private final AtomicLong retrievalCounter = new AtomicLong(0); private final AtomicLong thoughtIdCounter = new AtomicLong(0); @@ -214,15 +214,6 @@ public void close() throws IOException { suspensionCallback.close(); } - public Object modelClass(String clazzName) { - try { - Class clazz = getClass().getClassLoader().loadClass(clazzName); - return clazz.getConstructor().newInstance(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - @Override public void write(DataOutput out) throws IOException { out.writeLong(N); diff --git a/core/src/main/java/network/aika/callbacks/SuspensionCallback.java b/core/src/main/java/network/aika/callbacks/SuspensionCallback.java index a48e8080d..13096baa5 100644 --- a/core/src/main/java/network/aika/callbacks/SuspensionCallback.java +++ b/core/src/main/java/network/aika/callbacks/SuspensionCallback.java @@ -59,4 +59,13 @@ public interface SuspensionCallback { void loadIndex(Model m); void saveIndex(Model m) throws IOException; + + default Object modelClass(String clazzName, Model model) { + try { + Class clazz = model.getClass().getClassLoader().loadClass(clazzName); + return clazz.getConstructor().newInstance(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/core/src/main/java/network/aika/elements/neurons/Neuron.java b/core/src/main/java/network/aika/elements/neurons/Neuron.java index 92a2227da..e57082199 100644 --- a/core/src/main/java/network/aika/elements/neurons/Neuron.java +++ b/core/src/main/java/network/aika/elements/neurons/Neuron.java @@ -469,7 +469,7 @@ public void write(DataOutput out) throws IOException { public static Neuron read(DataInput in, Model m) throws Exception { String neuronClazz = in.readUTF(); - Neuron n = (Neuron) m.modelClass(neuronClazz); + Neuron n = (Neuron) m.suspensionCallback.modelClass(neuronClazz, m); n.readFields(in, m); return n; diff --git a/core/src/main/java/network/aika/elements/synapses/Synapse.java b/core/src/main/java/network/aika/elements/synapses/Synapse.java index 4bc06e97d..70787054b 100644 --- a/core/src/main/java/network/aika/elements/synapses/Synapse.java +++ b/core/src/main/java/network/aika/elements/synapses/Synapse.java @@ -348,7 +348,7 @@ public void write(DataOutput out) throws IOException { public static Synapse read(DataInput in, Model m) throws IOException { String synClazz = in.readUTF(); - Synapse s = (Synapse) m.modelClass(synClazz); + Synapse s = (Synapse) m.suspensionCallback.modelClass(synClazz, m); s.readFields(in, m); return s; }