-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
MalHalNode.class.st
88 lines (69 loc) · 1.49 KB
/
MalHalNode.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Class {
#name : #MalHalNode,
#superclass : #MalTarjanNode,
#instVars : [
'hNumber',
'previousNodes'
],
#category : #'Moose-Algos-Graph'
}
{ #category : #accessing }
MalHalNode >> from: aHalNode [
previousNodes add: aHalNode
]
{ #category : #accessing }
MalHalNode >> hNumber [
^ hNumber
]
{ #category : #accessing }
MalHalNode >> hNumber: anObject [
hNumber := anObject
]
{ #category : #initialization }
MalHalNode >> initialize [
super initialize.
previousNodes := Set new
]
{ #category : #testing }
MalHalNode >> isSink [
^ self nextNodes isEmpty
]
{ #category : #testing }
MalHalNode >> isSource [
^ self previousNodes isEmpty
]
{ #category : #accessing }
MalHalNode >> label [
^ 'Ha '
]
{ #category : #'hal-algorithm' }
MalHalNode >> markCycleWith: anInteger [
self cycleNodes do: [ :next | next hNumber: anInteger ].
^ self cycleNodes
]
{ #category : #'hal-algorithm' }
MalHalNode >> markHNumber: anInteger [
self hNumber: anInteger.
self isInCycle ifTrue: [
^ self markCycleWith: anInteger
].
^ OrderedCollection new
]
{ #category : #accessing }
MalHalNode >> previousNodes [
^ previousNodes
]
{ #category : #accessing }
MalHalNode >> previousNodes: anObject [
previousNodes := anObject
]
{ #category : #'hal-algorithm' }
MalHalNode >> removeCycleFromEdges [
self nextNodes removeAllFoundIn: self cycleNodes.
self previousNodes removeAllFoundIn: self cycleNodes
]
{ #category : #accessing }
MalHalNode >> to: aNode [
super to: aNode.
aNode previousNodes add: self
]