とりあえず(?)作ってみた。(手荷物一時預かり 編)その4。
東方算程譚:手荷物一時預かり
Cloak クラス。こんなんでいいのかな・・・ほんとにもぅw
Public Class Cloak
Private tags As [Set](Of Integer)
Public Sub New()
tags = New [Set](Of Integer)
tags.Insert(0)
End Sub
Public Function Peek() As Integer
Dim iter As [Set](Of Integer).Iterator = tags.Find(0)
Dim minValue As Integer = tags.Begin.CurrentIf iter.Current = minValue Then
Dim acquiredMaxValue As Integer = tags.RBegin.Current
Return acquiredMaxValue + 1
Else
iter -= 1
Return Math.Abs(iter.Current)
End If
End Function
Public Function Acquire() As Integer
Dim n As Integer = Me.Peek()
Me.tags.Erace(-n)
Me.tags.Insert(n)Return n
End Function
Public Function Release(ByVal n As Integer) As Boolean
If Me.tags.Erace(n) Then
Return Me.tags.Insert(-n)
Else
Return False
End If
End Function
Public Sub Clear()
Me.tags.Clear()
End Sub
Public Function Acquired() As List(Of Integer)
Dim result As New List(Of Integer)
Dim iter As [Set](Of Integer).Iterator = Me.tags.RBegin
While iter.Current > 0
result.Add(iter.Current)
iter.MoveNext()
End While
Return result
End Function
Public Function Released() As List(Of Integer)
Dim result As New List(Of Integer)
Dim iter As [Set](Of Integer).Iterator = Me.tags.Begin
While iter.Current < 0
result.Add(Math.Abs(iter.Current))
iter.MoveNext()
End While
Return result
End Function
End Class