/// <summary> /// 棋譜を文字列として書き込みます。 /// </summary> public static string WriteTo(KifuObject kifuObj, KifuFormat format) { using (var writer = new StringWriter()) { Save(writer, kifuObj, format); return writer.ToString(); } }
/// <summary> /// 棋譜を文字列として書き込みます。 /// </summary> public static string WriteTo(KifuObject kifuObj, KifuFormat format) { using (var writer = new StringWriter()) { Save(writer, kifuObj, format); return(writer.ToString()); } }
/// <summary> /// 棋譜ファイルに保存します。 /// </summary> public static void SaveFile(string filepath, KifuObject kifuObj, KifuFormat? format) { if (string.IsNullOrEmpty(filepath)) { throw new ArgumentNullException("filepath"); } using (var stream = new FileStream(filepath, FileMode.Create)) using (var writer = new StreamWriter(stream, KifuObject.DefaultEncoding)) { Save(writer, kifuObj, format.Value); } }
/// <summary> /// 各フォーマットに対応するライターを取得します。 /// </summary> private static IKifuWriter GetWriter(KifuFormat format) { switch (format) { case KifuFormat.Kif: return new Kif.KifWriter(true); case KifuFormat.Ki2: return new Kif.KifWriter(false); case KifuFormat.Csa: return new Csa.CsaWriter(); } return null; }
/// <summary> /// 各フォーマットに対応するライターを取得します。 /// </summary> private static IKifuWriter GetWriter(KifuFormat format) { switch (format) { case KifuFormat.Kif: return(new Kif.KifWriter(true)); case KifuFormat.Ki2: return(new Kif.KifWriter(false)); case KifuFormat.Csa: return(new Csa.CsaWriter()); } return(null); }
/// <summary> /// 棋譜を指定の出力先に書き込みます。 /// </summary> public static void Save(TextWriter writer, KifuObject kifuObj, KifuFormat format) { if (writer == null) { throw new ArgumentNullException("writer"); } if (kifuObj == null) { throw new ArgumentNullException("kifuObj"); } var kifuWriter = GetWriter(format); if (kifuWriter == null) { throw new ShogiException( format + ": このフォーマットの棋譜出力は未対応です。"); } kifuWriter.Save(writer, kifuObj); }
/// <summary> /// 棋譜を指定の出力先に書き込みます。 /// </summary> public static void Save(TextWriter writer, KifuObject kifuObj, KifuFormat format) { if (writer == null) { throw new ArgumentNullException("writer"); } if (kifuObj == null) { throw new ArgumentNullException("kifuObj"); } var kifuWriter = GetWriter(format); if (kifuWriter == null) { throw new ShogiException( format + ": このフォーマットの棋譜出力は未対応です。"); } kifuWriter.Save(writer, kifuObj); }
/// <summary> /// 棋譜の出力+入力を行い、ファイルが正しく扱えているか調べます。 /// </summary> public static void ReadWriteTest(KifuObject kifu0, KifuFormat format, int moveCount) { // 棋譜の書き出し var wrote = KifuWriter.WriteTo(kifu0, format); Assert.IsNotNullOrEmpty(wrote); // 棋譜の読み込み パート2 var kifu1 = KifuReader.LoadFrom(wrote); Assert.NotNull(kifu1); // 読み込んだ棋譜の確認 Assert.LessOrEqual(moveCount, kifu1.MoveList.Count()); // 局面の比較を行います。 var board0 = kifu0.StartBoard.Clone(); kifu0.MoveList.ForEach(_ => board0.DoMove(_)); var board1 = kifu1.StartBoard.Clone(); kifu1.MoveList.ForEach(_ => board1.DoMove(_)); Assert.True(Board.BoardEquals(kifu0.StartBoard, kifu1.StartBoard)); Assert.True(kifu0.RootNode.NodeEquals(kifu1.RootNode, true)); Assert.True(Board.BoardEquals(board0, board1)); // ヘッダ要素を比較します。 Assert.AreEqual(kifu0.Header.Count(), kifu1.Header.Count()); foreach (var item0 in kifu0.Header) { Assert.True(kifu1.Header.Contains(item0.Key)); Assert.AreEqual(item0.Value, kifu1.Header[item0.Key]); } }
/// <summary> /// 棋譜の出力+入力を行い、ファイルが正しく扱えているか調べます。 /// </summary> public static void ReadWriteTest(KifuObject kifu0, KifuFormat format, int moveCount) { // 棋譜の書き出し var wrote = KifuWriter.WriteTo(kifu0, format); Assert.IsNotNullOrEmpty(wrote); // 棋譜の読み込み パート2 var kifu1 = KifuReader.LoadFrom(wrote); Assert.NotNull(kifu1); // 読み込んだ棋譜の確認 Assert.LessOrEqual(moveCount, kifu1.MoveList.Count()); // 局面の比較を行います。 var board0 = kifu0.StartBoard.Clone(); kifu0.MoveList.ForEach(_ => board0.DoMove(_)); var board1 = kifu1.StartBoard.Clone(); kifu1.MoveList.ForEach(_ => board1.DoMove(_)); Assert.True(Board.BoardEquals(kifu0.StartBoard, kifu1.StartBoard)); Assert.True(kifu0.RootNode.NodeEquals(kifu1.RootNode)); Assert.True(Board.BoardEquals(board0, board1)); // ヘッダ要素を比較します。 Assert.AreEqual(kifu0.Header.Count(), kifu1.Header.Count()); foreach (var item0 in kifu0.Header) { Assert.True(kifu1.Header.Contains(item0.Key)); Assert.AreEqual(item0.Value, kifu1.Header[item0.Key]); } }