Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: ecd50f38ceb6112c37cd88ea89dabf1b7adac69b (plain) (blame)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
RoomModel TestBindings {
	
	ActorClass Example1 {
		Structure {
			ActorRef ref1: AC1
			ActorRef ref2: AC2
			
			// no self connection allowed, ports are identical
			Binding ref1.reg and ref1.reg
		}
	}
	
	ActorClass Example1a {
		Structure {
			ActorRef ref1: AC1
			ActorRef ref2: AC2
			
			// ports are already bound
			Binding ref1.reg and ref2.conj
			Binding ref1.reg and ref2.conj
		}
	}
	
	ActorClass Example2 {
		Structure {
			ActorRef ref1: AC1
			ActorRef ref2: AC2
			ActorRef ref3: AC2
			
			// port with multiplicity 1 is already connected
			Binding ref1.reg and ref2.conj
			Binding ref1.reg and ref3.conj
		}
	}
	
	ActorClass Example3 {
		Structure {
			ActorRef ref1: AC1
			ActorRef ref2: AC2
			
			// protocols don't match
			Binding ref1.reg and ref2.other
		}
	}
	
	ActorClass Example4 {
		Structure {
			ActorRef ref1: AC3
			ActorRef ref2: AC4
			
			// protocol extends incoming
			Binding ref1.base and ref2.extin
		}
	}
	
	ActorClass Example5 {
		Structure {
			ActorRef ref1: AC3
			ActorRef ref2: AC4
			
			// ok
			Binding ref1.base2 and ref2.extout
		}
	}
	
	ActorClass Example6 {
		Structure {
			ActorRef ref1: AC3
			ActorRef ref2: AC4
	
			// protocol extends outgoing
			Binding ref1.base3 and ref2.extout2
		}
	}
	
	ActorClass Example7 {
		Structure {
			ActorRef ref1: AC3
			ActorRef ref2: AC4
	
			// derived protocols not connectable (both directions extended)
			Binding ref1.base4 and ref2.extinout 
		}
	}
	
	ActorClass Example8 {
		Structure {
			ActorRef ref1: AC5a
			ActorRef ref2: AC6a
			ActorRef ref3: AC5a
			ActorRef ref4: AC6a
	
			// a replicated port must have at most one replicated peer
			Binding ref1.p and ref2.pc 
			Binding ref2.pc and ref3.p 
			Binding ref3.p and ref4.pc 
		}
	}


	// helper actor classes
		
	ActorClass AC1 {
		Interface {
			Port reg: PC1
		}
	}
	
	ActorClass AC2 {
		Interface {
			conjugated Port conj: PC1
			conjugated Port other: PC2
		}
	}
		
	ActorClass AC3 {
		Interface {
			Port base: PCBase
			Port base2: PCBase
			conjugated Port base3: PCBase
			conjugated Port base4: PCBase
		}
	}
	
	ActorClass AC4 {
		Interface {
			conjugated Port extout: PCExtendOut
			conjugated Port extin: PCExtendIn
			Port extout2: PCExtendOut
			Port extinout: PCExtendInOut
		}
	}
	
	ActorClass AC5 {
		Interface {
			Port p[2]: PC1
		}
	}
	
	ActorClass AC5a {
		Interface {
			Port p[*]: PC1
		}
	}
	
	ActorClass AC6 {
		Interface {
			conjugated Port pc[2]: PC1
		}
	}
	
	ActorClass AC6a {
		Interface {
			conjugated Port pc[*]: PC1
		}
	}
	
	ProtocolClass PC1 {
		incoming {
			Message in1()
		}
	}
	
	ProtocolClass PC2 {
		incoming {
			Message in1()
		}
	}
	
	ProtocolClass PCBase {
		incoming {
			Message in1()
		}
	}
	
	ProtocolClass PCExtendIn extends PCBase {
		incoming {
			Message in2()
		}
	}
	
	ProtocolClass PCExtendOut extends PCBase {
		outgoing {
			Message out1()
		}
	}
	
	ProtocolClass PCExtendInOut extends PCBase {
		incoming {
			Message in2()
		}
		outgoing {
			// a derived protocol should add either incoming or outgoing messages, not both
			Message out1()
		}
	}
	
}

Back to the top