/// <summary> /// Writes a castling flags. /// </summary> /// <param name="writer">The file writer.</param> /// <param name="castling">The castling data.</param> private void WriteCastling(StreamWriter writer, FriendlyCastling castling) { writer.WriteLine(PersistenceConstants.CastlingSection); writer.WriteLine(castling.WhiteShortCastlingPossibility.ToString()); writer.WriteLine(castling.WhiteLongCastlingPossibility.ToString()); writer.WriteLine(castling.BlackShortCastlingPossibility.ToString()); writer.WriteLine(castling.BlackLongCastlingPossibility.ToString()); writer.WriteLine(castling.WhiteCastlingDone.ToString()); writer.WriteLine(castling.BlackCastlingDone.ToString()); }
/// <summary> /// Loads <see cref="FriendlyBoard"/> object from the specified file. /// </summary> /// <param name="path">The path to file.</param> /// <exception cref="InvalidSectionValueException">Thrown when loaded section name has invalid value.</exception> /// <returns><see cref="FriendlyBoard"/> object loaded from the file.</returns> public FriendlyBoard Read(string path) { FriendlyPiecesList pieces = null; FriendlyCastling castling = null; FriendlyEnPassant enPassant = null; using (var reader = new StreamReader(path)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); if (line == null) { throw new InvalidSectionValueException(); } var lineAfterTrim = line.Trim(); if (lineAfterTrim.Length == 0) { continue; } switch (lineAfterTrim) { case PersistenceConstants.BoardSection: { pieces = ReadBoard(reader); break; } case PersistenceConstants.CastlingSection: { castling = ReadCastling(reader); break; } case PersistenceConstants.EnPassantSection: { enPassant = ReadEnPassant(reader); break; } default: { throw new InvalidSectionValueException(); } } } } return(new FriendlyBoard(pieces, castling, enPassant)); }