Skip to content

Commit 471a4d6

Browse files
author
Lukas Molzberger
committed
Implementation for the delete call
1 parent 7964fe6 commit 471a4d6

File tree

7 files changed

+74
-2
lines changed

7 files changed

+74
-2
lines changed

src/main/java/network/aika/AbstractNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,6 @@ public static <P extends Provider> AbstractNode read(DataInput in, P p) throws I
7777
return n;
7878
}
7979

80+
public abstract void delete(Set<String> modelLabels);
81+
8082
}

src/main/java/network/aika/Provider.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package network.aika;
22

33

4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
47
import java.io.*;
58
import java.lang.ref.WeakReference;
9+
import java.util.Set;
610
import java.util.zip.GZIPInputStream;
711
import java.util.zip.GZIPOutputStream;
812

@@ -12,6 +16,8 @@
1216
*/
1317
public class Provider<T extends AbstractNode> implements Comparable<Provider<?>> {
1418

19+
private static final Logger log = LoggerFactory.getLogger(Provider.class);
20+
1521
protected Model model;
1622
protected Integer id;
1723

@@ -149,6 +155,19 @@ private void reactivate() {
149155
model.register(this);
150156
}
151157

158+
public void delete(Set<String> modelLabels) {
159+
get();
160+
161+
n.getModelLabels().removeAll(modelLabels);
162+
163+
if(!n.getModelLabels().isEmpty()) {
164+
return;
165+
}
166+
167+
n.delete(modelLabels);
168+
169+
model.suspensionHook.delete(id);
170+
}
152171

153172
@Override
154173
public boolean equals(Object o) {

src/main/java/network/aika/SuspensionHook.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,7 @@ public interface SuspensionHook {
3737

3838
byte[] retrieve(int id);
3939

40+
void delete(int id);
41+
4042
Iterable<Integer> getAllNodeIds();
4143
}

src/main/java/network/aika/lattice/AndNode.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,24 @@ protected void propagate(AndActivation act) {
9898
}
9999

100100

101+
@Override
102+
public void delete(Set<String> modelLabels) {
103+
for(Entry e: parents) {
104+
Provider<? extends Node> pp = e.rv.parent;
105+
Node pn = pp.get();
106+
pn.lock.acquireWriteLock();
107+
pn.removeAndChild(e.ref);
108+
pn.setModified();
109+
pn.lock.releaseWriteLock();
110+
pp.delete(modelLabels);
111+
}
112+
113+
for(Entry e: parents) {
114+
e.rv.parent.get().cleanup();
115+
}
116+
}
117+
118+
101119
@Override
102120
public void cleanup() {
103121
if(!isRemoved && !isRequired()) {

src/main/java/network/aika/lattice/InputNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,4 +264,9 @@ public void readFields(DataInput in, Model m) throws IOException {
264264
inputNeuron = m.lookupNeuron(in.readInt());
265265
}
266266
}
267+
268+
@Override
269+
public void delete(Set<String> modelLabels) {
270+
271+
}
267272
}

src/main/java/network/aika/lattice/OrNode.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,20 +212,34 @@ void addInput(int[] synapseIds, int threadId, Node in, boolean andMode) {
212212
}
213213

214214

215-
void remove(int threadId) {
215+
@Override
216+
public void delete(Set<String> modelLabels) {
216217
outputNeuron.get().remove();
217218

218219
super.remove();
219220

220221
try {
221222
lock.acquireReadLock();
222-
removeParents(threadId);
223+
removeParents(modelLabels);
223224
} finally {
224225
lock.releaseReadLock();
225226
}
226227
}
227228

228229

230+
void removeParents(Set<String> modelLabels) {
231+
for (OrEntry oe : andParents) {
232+
Provider<? extends Node> pp = oe.parent;
233+
Node pn = pp.get();
234+
pn.changeNumberOfNeuronRefs(provider.getModel().defaultThreadId, provider.getModel().visitedCounter.addAndGet(1), -1);
235+
pn.removeOrChild(oe);
236+
pn.setModified();
237+
238+
pp.delete(modelLabels);
239+
}
240+
andParents.clear();
241+
}
242+
229243
void removeParents(int threadId) {
230244
for (OrEntry oe : andParents) {
231245
Node pn = oe.parent.get();

src/main/java/network/aika/neuron/INeuron.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,18 @@ public void reactivate() {
732732
}
733733
}
734734

735+
736+
@Override
737+
public void delete(Set<String> modelLabels) {
738+
getInputSynapses()
739+
.forEach(s -> {
740+
s.unlink();
741+
s.getInput().delete(modelLabels);
742+
});
743+
744+
inputNode.delete(modelLabels);
745+
}
746+
735747
public void setBias(double b) {
736748
biasDelta = b - bias;
737749
}

0 commit comments

Comments
 (0)