source: trunk/ab5.0/ablib/src/Classes/System/Delegate.ab@ 542

Last change on this file since 542 was 542, checked in by イグトランス (egtra), 16 years ago

Controlをデリゲートベースにした。DictionaryのContainsKeyとTryGetValueを実装。デリゲートの追加・削除の右辺にNothingを指定可能にした。

File size: 1.9 KB
Line 
1Namespace System
2
3
4Class _SimpleDelegate
5Public
6 hasThisPtr As Boolean
7 object As Object
8 methodPtr As VoidPtr
9
10 Sub _SimpleDelegate( object As Object, methodPtr As VoidPtr )
11 This.hasThisPtr = True
12 This.object = object
13 This.methodPtr = methodPtr
14 End Sub
15 Sub _SimpleDelegate( methodPtr As VoidPtr )
16 This.hasThisPtr = False
17 This.object = Nothing
18 This.methodPtr = methodPtr
19 End Sub
20
21 Function IsEqual( sd As _SimpleDelegate ) As Boolean
22 Return ( This.hasThisPtr = sd.hasThisPtr and ObjPtr(This.object) = ObjPtr(sd.object) and This.methodPtr = sd.methodPtr )
23 End Function
24End Class
25
26Class DelegateBase
27Protected
28 simpleDelegates As System.Collections.Generic.List<_SimpleDelegate>
29
30 Sub _Add( dg As DelegateBase )
31 If Not ActiveBasic.IsNothing(dg) Then
32 Dim i As Long
33 For i=0 To ELM(dg.simpleDelegates.Count)
34 simpleDelegates.Add( dg.simpleDelegates[i] )
35 Next
36 End If
37 End Sub
38
39 Sub _Delete( dg As DelegateBase )
40 If Not ActiveBasic.IsNothing(dg) Then
41 Dim i As Long
42 For i=0 To ELM(This.simpleDelegates.Count)
43 Dim i2 As Long
44 Dim isExist = False
45 For i2=0 To ELM(dg.simpleDelegates.Count)
46 If This.simpleDelegates[i].IsEqual( dg.simpleDelegates[i2] ) Then
47 isExist = True
48 End If
49 Next
50 If isExist Then
51 This.simpleDelegates.RemoveAt( i )
52 End If
53 Next
54 End If
55 End Sub
56
57Public
58 Sub DelegateBase()
59 simpleDelegates = New System.Collections.Generic.List<_SimpleDelegate>()
60 End Sub
61
62/*
63 Sub Operator + ( sd As System._SimpleDelegate )
64 Add( sd )
65 End Sub*/
66Public
67End Class
68
69
70End Namespace
71
72
73Function _System_CreateSimpleDynamicDelegate( object As Object, methodPtr As VoidPtr ) As System._SimpleDelegate
74 Return New System._SimpleDelegate( object, methodPtr )
75End Function
76Function _System_CreateSimpleStaticDelegate( methodPtr As VoidPtr ) As System._SimpleDelegate
77 Return New System._SimpleDelegate( methodPtr )
78End Function
Note: See TracBrowser for help on using the repository browser.