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

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

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

File size: 1.9 KB
RevLine 
[338]1Namespace System
2
[340]3
[338]4Class _SimpleDelegate
5Public
[340]6 hasThisPtr As Boolean
[338]7 object As Object
8 methodPtr As VoidPtr
9
10 Sub _SimpleDelegate( object As Object, methodPtr As VoidPtr )
[340]11 This.hasThisPtr = True
[338]12 This.object = object
13 This.methodPtr = methodPtr
14 End Sub
[340]15 Sub _SimpleDelegate( methodPtr As VoidPtr )
16 This.hasThisPtr = False
17 This.object = Nothing
18 This.methodPtr = methodPtr
19 End Sub
[352]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
[338]24End Class
25
26Class DelegateBase
27Protected
28 simpleDelegates As System.Collections.Generic.List<_SimpleDelegate>
29
[340]30 Sub _Add( dg As DelegateBase )
[542]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
[340]37 End Sub
38
[352]39 Sub _Delete( dg As DelegateBase )
[542]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 )
[352]52 End If
53 Next
[542]54 End If
[352]55 End Sub
56
[338]57Public
58 Sub DelegateBase()
59 simpleDelegates = New System.Collections.Generic.List<_SimpleDelegate>()
60 End Sub
[340]61
62/*
63 Sub Operator + ( sd As System._SimpleDelegate )
64 Add( sd )
65 End Sub*/
[338]66Public
67End Class
68
69
70End Namespace
[340]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.