--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+\r
+namespace com.andoutomo.kybernetes.view\r
+{\r
+ /// <summary>\r
+ /// コマンドヒストリを保持します。\r
+ /// </summary>\r
+ internal class CmdHistory\r
+ {\r
+ private string[] commandHist;\r
+ private int currentPosition;\r
+ const int MAXHIST = 10; \r
+\r
+ internal CmdHistory()\r
+ {\r
+ commandHist = new string[MAXHIST];\r
+ currentPosition = 0;\r
+ }\r
+ /// <summary>\r
+ /// 直前に実行されたコマンドをを提示します。\r
+ /// 同時にカレント位置を動かし、さらにその前のコマンドを提示する準備を行います。\r
+ /// </summary>\r
+ /// <returns></returns>\r
+ internal string prevCommand()\r
+ {\r
+ //終点まで来ている場合は最後のコマンドを表示。カレント位置も動かさない。\r
+ if (currentPosition == MAXHIST)\r
+ {\r
+ return commandHist[MAXHIST-1];\r
+ }\r
+ //次に提示するコマンドがある場合は、カレント位置を動かす。\r
+ if (!string.IsNullOrEmpty(commandHist[currentPosition]))\r
+ {\r
+ currentPosition++;\r
+ }\r
+ //ヒストリ配列からコマンドを取得してreturn\r
+ if (currentPosition > 0)\r
+ {\r
+ return commandHist[currentPosition - 1];\r
+ }\r
+ //この段階でcurrentPosition=0(ヒストリがない)場合は、空文字を返す。\r
+ else\r
+ {\r
+ return string.Empty;\r
+ }\r
+ }\r
+ /// <summary>\r
+ /// カレント位置の次に実行されたコマンドを提示します。\r
+ /// </summary>\r
+ /// <returns></returns>\r
+ internal string nextCommand()\r
+ {\r
+ currentPosition--;\r
+ if (currentPosition <= 0)\r
+ {\r
+ currentPosition = 0;\r
+ return string.Empty;\r
+ }\r
+ return commandHist[currentPosition-1];\r
+ }\r
+ /// <summary>\r
+ /// コマンド受け入れを行います。\r
+ /// コマンドはスタックされ、10件以上の場合は10番目が破棄されます。\r
+ /// また、同一のコマンドを連続入力した場合はスタックを行いません。\r
+ /// </summary>\r
+ /// <param name="command"></param>\r
+ internal void stackCmd(string command)\r
+ {\r
+ if (command != commandHist[0])\r
+ {\r
+ //スタックを行う\r
+ for (int i = MAXHIST-1; i > 0; i--)\r
+ {\r
+ commandHist[i] = commandHist[i - 1];\r
+ }\r
+\r
+ //新たなコマンドを追加する\r
+ commandHist[0] = command;\r
+ }\r
+ //ポジションをリセット\r
+ resetPosition();\r
+ }\r
+ /// <summary>\r
+ /// ヒストリで参照するポジションをリセットします。\r
+ /// </summary>\r
+ internal void resetPosition()\r
+ {\r
+ currentPosition = 0;\r
+ }\r
+ }\r
+}\r