private static bool HandleEndFieldsFromEndField(EndField endField, int fieldCount) { if (endField == null) { return(false); } fieldCount = Math.Abs(fieldCount); EndField proveEndField = (EndField)endField.Next; //fieldCount--; for (int j = fieldCount; j > 0; j--) { if (proveEndField == null) { return(false); } if (proveEndField.CurrentMeeple != null) { return(false); } proveEndField = (EndField)proveEndField.Next; } return(true); }
private static bool IsSimpleInvalidChangeField(MoveDestinationField field) { KennelField kennelField = field as KennelField; EndField endField = field as EndField; return(kennelField != null || endField != null); }
private static bool HandleEndFieldsFromStartField(StartField startField, int fieldCount) { if (startField == null) { return(false); } fieldCount = Math.Abs(fieldCount); EndField endField = startField.EndFieldEntry; fieldCount--; for (int j = fieldCount; j > 0; j--) { endField = (EndField)endField.Next; if (endField == null) { return(false); } if (endField.CurrentMeeple != null) { return(false); } } return(true); }
public void TestProveChangePlaceEndField() { Meeple meeple = new Meeple(new KennelField(1), ColorCode.Green); Meeple meeple2 = new Meeple(new KennelField(2), ColorCode.Blue); meeple.CurrentPosition = new EndField(2); EndField field2 = new EndField(3) { CurrentMeeple = meeple2 }; Assert.AreEqual(false, Validation.ProveChangePlace(meeple, field2)); }
public static List <List <string> > CSVStandardParse(string content) { List <List <string> > ret = new List <List <string> >(); ParseState state = ParseState.FieldStart; const char comma = ','; const char quote = '"'; const char newline1 = '\r'; const char newline2 = '\n'; bool appendNewlineAtEnd = true; if (content.Length > 0) { var last = content[content.Length - 1]; if (last == newline1 || last == newline2) { appendNewlineAtEnd = false; } } int len = content.Length; if (appendNewlineAtEnd) { ++len; } List <string> currentLine = new List <string>(); StringBuilder sb = new StringBuilder(); EndLine end_line = delegate() { currentLine.Add(sb.ToString()); sb.Length = 0; ret.Add(currentLine); currentLine = new List <string>(); }; EndField end_field = delegate() { currentLine.Add(sb.ToString()); sb.Length = 0; }; NextCharGetter next_char = delegate(int idx) { if (appendNewlineAtEnd && (idx == (len - 1))) { return(newline1); } else { return(content[idx]); } }; for (int i = 0; i < len; ++i) { char c = next_char(i); switch (state) { case ParseState.FieldStart: { switch (c) { case comma: { end_field(); } break; case quote: { state = ParseState.QuoteField; } break; case newline1: { if (((i + 1) < len) && newline2 == content[i + 1]) { ++i; } end_line(); } break; case newline2: { end_line(); } break; default: { sb.Append(c); state = ParseState.NonQuoteField; } break; } } break; case ParseState.NonQuoteField: { switch (c) { case comma: { end_field(); state = ParseState.FieldStart; } break; case quote: { state = ParseState.Error; } break; case newline1: { if (((i + 1) < len) && newline2 == content[i + 1]) { ++i; } end_line(); state = ParseState.FieldStart; } break; case newline2: { end_line(); state = ParseState.FieldStart; } break; default: { sb.Append(c); } break; } } break; case ParseState.QuoteField: { switch (c) { case quote: { if ((i + 1) >= len) { end_line(); } else { if (quote == content[i + 1]) { sb.Append(quote); ++i; } else if (comma == content[i + 1]) { end_field(); ++i; state = ParseState.FieldStart; } else if (newline1 == content[i + 1]) { if ((i + 2) >= len) { state = ParseState.Error; } else { if (newline2 == content[i + 2]) { end_line(); ++i; ++i; state = ParseState.FieldStart; } else { end_line(); ++i; state = ParseState.FieldStart; } } } else if (newline2 == content[i + 1]) { end_line(); ++i; state = ParseState.FieldStart; } else { state = ParseState.Error; } } } break; default: { sb.Append(c); } break; } } break; case ParseState.Error: { throw new Exception("invalid csv format!"); } default: break; } } if (ParseState.Error == state) { throw new Exception("invalid csv format!"); } return(ret); }