Exemple #1
0
        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);
        }
Exemple #2
0
        private static bool IsSimpleInvalidChangeField(MoveDestinationField field)
        {
            KennelField kennelField = field as KennelField;
            EndField    endField    = field as EndField;

            return(kennelField != null || endField != null);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
        }