とりあえず(?)作ってみた。(手荷物一時預かり 編)その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.Current

If 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