' リスナコレクション Class TraceListenerCollection ppListeners As **TraceListener count As Long Public Sub TraceListenerCollection() ppListeners = _System_malloc( 1 ) End Sub Sub ~TraceListenerCollection() Dim i As Long For i = 0 To ELM( count ) Delete ppListeners[i] Next _System_free( ppListeners ) End Sub '---------------------------------------------------------------- ' パブリック メソッド '---------------------------------------------------------------- ' リスナを追加 Sub Add( listener As TraceListener ) As Long ppListeners = _System_realloc( ppListeners, ( count + 1 ) * SizeOf( *TraceListener ) ) ppListeners[count] = New TraceListener( listener ) count++ End Sub ' 複数のリスナを追加 Sub AddRange( listeners As TraceListenerCollection ) ' TODO: 実装 End Sub ' リストからすべてのリスナを削除 Sub Clear() ' TODO: 実装 End Sub ' 指定したリスナのインデックスを取得 Function IndexOf( listener As TraceListener ) ' TODO: 実装 End Function ' リスナを挿入 Sub Insert( index As Long, listener As TraceListener ) ' TODO: 実装 End Sub ' リスナを削除 Function Remove( name As String ) ' TODO: 実装 End Function Function Remove( listener As TraceListener ) ' TODO: 実装 End Function '---------------------------------------------------------------- ' パブリック プロパティ '---------------------------------------------------------------- ' インデクサ ( Getter ) Function Operator[] ( index As Long ) As TraceListener If index < 0 or count <= index Then ' TODO: エラー処理 debug End If Dim tempListener As TraceListener( ByVal ppListeners[index] ) Return tempListener End Function ' 保有するリスナの数を取得する Function Count() As Long Return count End Function End Class Class Trace Static indentLevel = 0 As Long Static indentSize = 4 As Long ' リスナ管理 Static Listeners As TraceListenerCollection Public '---------------------------------------------------------------- ' パブリック メソッド '---------------------------------------------------------------- ' アサート(コールスタックを表示) Static Sub Assert( condition As Boolean ) If condition == False then 'TODO: コールスタックを表示 End If End Sub ' アサート(メッセージ文字列を表示) Static Sub Assert( condition As Boolean, message As String ) If condition == False then ' TODO: メッセージボックス形式での表示に対応 WriteLine( message ) End If End Sub ' アサート(メッセージ文字列と詳細文字列を表示) Static Sub Assert( condition As Boolean, message As String, detailMessage As String ) If condition == False then ' TODO: メッセージボックス形式での表示に対応 WriteLine( message ) End If End Sub ' インデントレベルを上げる Static Sub Indent() IndentLevel = indentLevel + 1 End Sub ' インデントレベルを下げる Static Sub Unindent() If indentLevel <= 0 Then indentLevel = 0 Return End If IndentLevel = indentLevel - 1 End Sub Static Sub Write( message As String ) End Sub ' 一行の文字列を出力 Static Sub WriteLine( message As String ) Dim i As Long For i = 0 To ELM( Listeners.Count ) Dim temp As TraceListener temp = Listeners[i] temp.WriteLine( message ) Next End Sub '---------------------------------------------------------------- ' パブリック プロパティ '---------------------------------------------------------------- ' IndentLevelプロパティ Static Function IndentLevel() As Long Return indentLevel End Function Static Sub IndentLevel( indentLevel As Long ) This.indentLevel = indentLevel Dim i As Long For i = 0 To ELM( Listeners.Count ) Dim temp As TraceListener temp = Listeners[i] temp.IndentLevel = indentLevel Next End Sub ' IndentSizeプロパティ Static Function IndentSize() As Long Return indentSize End Function Static Sub IndentSize( size As Long ) indentSize = size Dim i As Long For i = 0 To ELM( Listeners.Count ) Dim temp As TraceListener temp = Listeners[i] temp.IndentSize = indentSize Next End Sub End Class