おねぃさんクラスを再度書いてみた。
といっても可及的速やかかどうかは知りません!w
コンパイルエラーを排除するだけのことに苦労しました。
どうしても ; 忘れますw
プロパティへの感覚が若干変ですw
ただのList
using System;
using System.Collections.Generic;
// 名前空間どうすっぺさ?
namespace Torikobito
{
/// <summary>
/// クロークの番号札の様に整数を管理するクラスです。
/// </summary>
public class Cloak
{
/// <summary>
/// 整数を管理するリスト。
/// </summary>
List<int> _tags;
/// <summary>
/// Cloak クラスの新しいインスタンスを初期化します。
/// </summary>
public Cloak()
: base()
{
this._tags = new List<int>();
}
/// <summary>
/// 使用できる最小の整数を返しますが、その整数は使用されません。
/// </summary>
/// <returns>使用できる最小の整数。</returns>
public int Peek()
{
if (this._tags.Count == 0)
{
return 1;
}
int minReleasedTagIndex = this._tags.FindLastIndex(new Predicate<int>(delegate(int tag) { return tag < 0; }));
if (minReleasedTagIndex == -1)
{
return this._tags.Count + 1;
}
else
{
return Math.Abs(this._tags[minReleasedTagIndex]);
}
}
/// <summary>
/// 使用できる最小の整数を返します。
/// </summary>
/// <returns>使用できる最小の整数。</returns>
public int Acquire()
{
int tag = this.Peek();
this._tags.Remove(-tag);
this._tags.Add(tag);
this._tags.Sort();
return tag;
}
/// <summary>
/// 整数を返却し、使用可能な状態にします。
/// </summary>
/// <param name="tag">返却する整数。</param>
/// <returns>返却できた場合は True、それ以外はFlase。 </returns>
public bool Release(int tag)
{
if (!this._tags.Contains(tag))
{
return false;
}
this._tags.Remove(tag);
this._tags.Add(-tag);
this._tags.Sort();
return true;
}
/// <summary>
/// すべての整数の状態をクリアします。
/// </summary>
/// <remarks>すべての整数が使用されていない状態に戻ります。</remarks>
public void Clear()
{
this._tags.Clear();
}
/// <summary>
/// 使用中の整数のリストを返します。
/// </summary>
/// <returns>配布した値のリスト。</returns>
public List<int> GetAcquiredTags()
{
return this._tags.FindAll(new Predicate<int>(delegate(int tag) { return tag > 0; }));
}
/// <summary>
/// 返却した整数のリストを返します。
/// </summary>
/// <returns>返却した整数のリスト。</returns>
public List<int> GetReleasedTags()
{
List<int> result = new List<int>();
List<int> tags = this._tags.FindAll(new Predicate<int>(delegate(int tag) { return tag < 0; }));
foreach (int tag in tags)
{
result.Add(Math.Abs(tag));
}
return result;
}
} // class
} // namespace