Exemplo n.º 1
0
 //初期化
 public Node(string na, Vector2 position, int d, StateString ss, GameObject game)
 {
     gameObject = game;
     state      = ss;
     id         = d;
     name       = na;
     window     = new Rect(position, new Vector2(200, 50));
 }
Exemplo n.º 2
0
    public GameState(IEnumerable <Deck> decks, bool isAwaitingSubGameWinner)
    {
        var deckCopies = decks.Select(DeckHelper.GetDeckCopy).ToList();

        Decks = deckCopies;
        IsAwaitingSubGameWinner = isAwaitingSubGameWinner;
        StateString             = $"{IsAwaitingSubGameWinner}->{string.Join(";", Decks.Select(deck => deck.ToString()))}";
        StateStringHashCode     = StateString.GetHashCode();
    }
 // Draw
 public bool Draw(int[,] matrix)
 {
     if (!string.IsNullOrEmpty(lhs) && !string.IsNullOrEmpty(rhs) && func != null)
     {
         StateString.Draw(matrix, lhs, rhs, func);
     }
     else
     {
         StateNumber.Draw(matrix);
     }
     return(true);
 }
Exemplo n.º 4
0
        public GameState(IList <Deck> decks, bool isAwaitingSubgameWinner)
        {
            var deckCopies = new List <Deck>();

            foreach (var deck in decks)
            {
                var deckCopy = DeckHelper.GetDeckCopy(deck);
                deckCopies.Add(deckCopy);
            }
            Decks = deckCopies;
            IsAwaitingSubgameWinner = isAwaitingSubgameWinner;
            StateString             = $"{IsAwaitingSubgameWinner}->{string.Join(";", Decks.Select(deck => deck.ToString()))}";
            StateStringHashCode     = StateString.GetHashCode();
        }
Exemplo n.º 5
0
        private void skinButton1_Click(object sender, EventArgs e)
        {
            RegisterState registerState = RegisterMapper.Submit(Phone.Text, Pwd.Text, Pwd2.Text);

            if (registerState == RegisterState.sucess)
            {
                MessageBox.Show(StateString.GetRegisterStateString(registerState));
                TransfEvent(Phone.Text);
                this.Close();
            }
            else
            {
                MessageBox.Show(StateString.GetRegisterStateString(registerState));
            }
        }
Exemplo n.º 6
0
        private void skinLabel3_Click(object sender, EventArgs e)
        {
            LoginState loginState = LoginMapper.Exist(Phone.Text.Trim(), Pwd.Text.Trim());

            if (loginState == LoginState.sucess)
            {
                xilixili xilixili = new xilixili();
                this.Visible = false;
                xilixili.ShowDialog();
                this.Dispose();
                this.Close();
            }
            else
            {
                MessageBox.Show(StateString.GetLoginStateString(loginState));
            }
        }
Exemplo n.º 7
0
        public void Decompress(string inputFile, string outputFile)
        {
            using (var temporaryStream = File.OpenWrite(outputFile))
                using (var inputStream = File.OpenRead(inputFile))
                {
                    #region Объявление пременных

                    /// <summary>
                    /// Состояние автомата при считывание
                    /// </summary>
                    StateString state = StateString.GoodString;

                    /// <summary>
                    /// Главный буффер для считывания
                    /// </summary>
                    byte[] mainBuffer = new byte[bufferSize];

                    /// <summary>
                    /// Вспомогательный буффер для одной строки
                    /// </summary>
                    byte[] stringBuffer = new byte[bufferSize];

                    /// <summary>
                    /// Старая дата
                    /// </summary>
                    DateTime oldDate = startDate;

                    /// <summary>
                    /// Старое число из полуинтервала [0, ulong.MaxValue)
                    /// </summary>
                    ulong oldNumber = 0;

                    /// <summary>
                    /// Размеры буфферов
                    /// </summary>
                    int mbSize = 0, sbSize = 0;

                    /// <summary>
                    /// Массив индексов указыващие на начало слова
                    /// </summary>
                    int[] posWordStart = new int[numberWords];

                    /// <summary>
                    /// Массив индексов указыващие на конец слова
                    /// </summary>
                    int[] posWordEnd = new int[numberWords];

                    /// <summary>
                    /// Резмеры массивов индексов
                    /// </summary>
                    int pwsSize = 0, pweSize = 0;
                    #endregion

                    mbSize = inputStream.Read(mainBuffer, 0, bufferSize);

                    while (mbSize != 0)
                    {
                        /// <summary>
                        /// Итератор главного буффера
                        /// </summary>
                        int i = -1;

                        while (i < mbSize - 1)
                        {
                            i++;
                            for (; i < mbSize && sbSize < bufferSize; i++, sbSize++)
                            {
                                stringBuffer[sbSize] = mainBuffer[i];

                                //Отсекаем строки по символу LF
                                if (mainBuffer[i] == 0x0A)
                                {
                                    sbSize++;
                                    break;
                                }

                                //Ищем позиции начала слова - если непробельному символу предшествует пробельный
                                if (sbSize != 0 && stringBuffer[sbSize] != 0x20 && stringBuffer[sbSize - 1] == 0x20 && pwsSize != numberWords)
                                {
                                    posWordStart[pwsSize] = sbSize;
                                    pwsSize++;
                                }

                                //Ищем позиции конца слова - если пробельному символу предшествует непробельный
                                if (sbSize != 0 && stringBuffer[sbSize] == 0x20 && stringBuffer[sbSize - 1] != 0x20 && pweSize != numberWords)
                                {
                                    posWordEnd[pweSize] = sbSize - 1;
                                    pweSize++;
                                }
                            }

                            //Если вышли из цикла из-за заполнения вспомогательного буффера стоит уменьшить итератор главного буффера
                            if (sbSize == bufferSize)
                            {
                                i--;
                            }

                            //Выполняем переход между состояниями
                            switch (state)
                            {
                            case StateString.FirstFullString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.UselessString;
                                }
                                else
                                {
                                    state = StateString.NotFirstFullString;
                                }
                            }
                            break;

                            case StateString.NotFirstFullString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.UselessString;
                                }
                                else
                                {
                                    state = StateString.NotFirstFullString;
                                }
                            }
                            break;

                            case StateString.GoodString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else if (sbSize == bufferSize)
                                {
                                    state = StateString.FirstFullString;
                                }
                                else
                                {
                                    state = StateString.UnreadString;
                                }
                            }
                            break;

                            case StateString.UnreadString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else
                                {
                                    state = StateString.FirstFullString;
                                }
                            }
                            break;

                            case StateString.UselessString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else
                                {
                                    state = StateString.UnreadString;
                                }
                            }
                            break;
                            }

                            //Производим запись в файл
                            if (state == StateString.FirstFullString || state == StateString.GoodString)
                            {
                                //Если в начале стоит 0x2E - точка = строка не сжата
                                if (stringBuffer[0] == 0x2E)
                                {
                                    temporaryStream.Write(stringBuffer, 1, sbSize - 1);
                                }
                                else if (double.TryParse(Encoding.UTF8.GetString(stringBuffer, 0, posWordEnd[0] + 1), out double time) &&
                                         ulong.TryParse(Encoding.UTF8.GetString(stringBuffer, posWordStart[0], posWordEnd[1] - posWordStart[0] + 1), out ulong difference))
                                {
                                    //Добавляем разницу между двумя датами в миллисекундах - time
                                    DateTime date = oldDate.AddMilliseconds(time);
                                    //Записываем дату
                                    temporaryStream.Write(Encoding.UTF8.GetBytes(date.ToString("yyyy-MM-dd HH:mm:ss,fff")));
                                    //0x20 - пробел
                                    temporaryStream.WriteByte(0x20);
                                    //Записываем новое число дополненное справа пробелами до 6 символов
                                    temporaryStream.Write(Encoding.UTF8.GetBytes((difference + oldNumber).ToString().PadRight(6)));
                                    temporaryStream.WriteByte(0x20);
                                    oldDate   = date;
                                    oldNumber = difference + oldNumber;
                                    //Записываем оставшуюся строку
                                    temporaryStream.Write(stringBuffer, posWordStart[1], sbSize - posWordStart[1]);
                                }
                                //Т.к. запись произведена - обнуляем счётчики
                                pwsSize = pweSize = sbSize = 0;
                            }
                            else if (state == StateString.NotFirstFullString || state == StateString.UselessString)
                            {
                                temporaryStream.Write(stringBuffer, 0, sbSize);
                                //Т.к. запись произведена - обнуляем счётчики
                                pwsSize = pweSize = sbSize = 0;
                            }
                        }

                        //Считываем новую строку
                        mbSize = inputStream.Read(mainBuffer, 0, bufferSize);
                    }

                    //Если по окончании считывания осталась необработанная строка во вспомогательном буффере
                    if (state == StateString.UnreadString)
                    {
                        if (stringBuffer[0] == 0x2E)
                        {
                            temporaryStream.Write(stringBuffer, 1, sbSize - 1);
                        }
                        else if (double.TryParse(Encoding.UTF8.GetString(stringBuffer, 0, posWordEnd[0] + 1), out double time) && ulong.TryParse(Encoding.UTF8.GetString(stringBuffer, posWordStart[0], posWordEnd[1] - posWordStart[0] + 1), out ulong number))
                        {
                            DateTime date = oldDate.AddMilliseconds(time);
                            temporaryStream.Write(Encoding.UTF8.GetBytes(date.ToString("yyyy-MM-dd HH:mm:ss,fff")));
                            temporaryStream.WriteByte(0x20);
                            temporaryStream.Write(Encoding.UTF8.GetBytes((number + oldNumber).ToString().PadRight(6)));
                            temporaryStream.WriteByte(0x20);
                            oldDate   = date;
                            oldNumber = number + oldNumber;
                            temporaryStream.Write(stringBuffer, posWordStart[1], sbSize - posWordStart[1]);
                        }
                    }
                }
        }
Exemplo n.º 8
0
        public void Compress(string inputFile, string temporaryFile)
        {
            using (var temporaryStream = File.Create(temporaryFile))
                using (var inputStream = File.OpenRead(inputFile))
                {
                    #region Объявление пременных

                    /// <summary>
                    /// Состояние автомата при считывание
                    /// </summary>
                    StateString state = StateString.GoodString;

                    /// <summary>
                    /// Главный буффер для считывания
                    /// </summary>
                    byte[] mainBuffer = new byte[bufferSize];

                    /// <summary>
                    /// Вспомогательный буффер для одной строки
                    /// </summary>
                    byte[] stringBuffer = new byte[bufferSize];

                    /// <summary>
                    /// Старая дата
                    /// </summary>
                    DateTime oldDate = startDate;

                    /// <summary>
                    /// Старое число из полуинтервала [0, ulong.MaxValue)
                    /// </summary>
                    ulong oldNumber = 0;

                    /// <summary>
                    /// Размеры буфферов
                    /// </summary>
                    int mbSize = 0, sbSize = 0;

                    /// <summary>
                    /// Массив индексов указыващие на начало слова
                    /// </summary>
                    int[] posWordStart = new int[numberWords];

                    /// <summary>
                    /// Массив индексов указыващие на конец слова
                    /// </summary>
                    int[] posWordEnd = new int[numberWords];

                    /// <summary>
                    /// Резмеры массивов индексов
                    /// </summary>
                    int pwsSize = 0, pweSize = 0;
                    #endregion

                    mbSize = inputStream.Read(mainBuffer, 0, bufferSize);
                    while (mbSize != 0)
                    {
                        /// <summary>
                        /// Итератор главного буффера
                        /// </summary>
                        int i = -1;

                        while (i < mbSize - 1)
                        {
                            i++;
                            for (; i < mbSize && sbSize < bufferSize; i++, sbSize++)
                            {
                                stringBuffer[sbSize] = mainBuffer[i];

                                //Отсекаем строки по символу LF
                                if (mainBuffer[i] == 0x0A)
                                {
                                    sbSize++;
                                    break;
                                }

                                //Ищем позиции начала слова - если непробельному символу предшествует пробельный
                                if (sbSize != 0 && stringBuffer[sbSize] != 0x20 && stringBuffer[sbSize - 1] == 0x20 && pwsSize != numberWords)
                                {
                                    posWordStart[pwsSize] = sbSize;
                                    pwsSize++;
                                }

                                //Ищем позиции конца слова - если пробельному символу предшествует непробельный
                                if (sbSize != 0 && stringBuffer[sbSize] == 0x20 && stringBuffer[sbSize - 1] != 0x20 && pweSize != numberWords)
                                {
                                    posWordEnd[pweSize] = sbSize - 1;
                                    pweSize++;
                                }
                            }

                            //Если вышли из цикла из-за заполнения вспомогательного буффера стоит уменьшить итератор главного буффера
                            if (sbSize == bufferSize)
                            {
                                i--;
                            }

                            //Выполняем переход между состояниями
                            switch (state)
                            {
                            case StateString.FirstFullString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.UselessString;
                                }
                                else
                                {
                                    state = StateString.NotFirstFullString;
                                }
                            }
                            break;

                            case StateString.NotFirstFullString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.UselessString;
                                }
                                else
                                {
                                    state = StateString.NotFirstFullString;
                                }
                            }
                            break;

                            case StateString.GoodString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else if (sbSize == bufferSize)
                                {
                                    state = StateString.FirstFullString;
                                }
                                else
                                {
                                    state = StateString.UnreadString;
                                }
                            }
                            break;

                            case StateString.UnreadString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else
                                {
                                    state = StateString.FirstFullString;
                                }
                            }
                            break;

                            case StateString.UselessString:
                            {
                                if (stringBuffer[sbSize - 1] == 0x0A)
                                {
                                    state = StateString.GoodString;
                                }
                                else
                                {
                                    state = StateString.UnreadString;
                                }
                            }
                            break;
                            }

                            //Производим запись в файл
                            if (state == StateString.FirstFullString || state == StateString.GoodString)
                            {
                                //Если количество слов достаточно
                                if (pwsSize > 2 && pweSize > 2)
                                {
                                    //Получаем строку с датой
                                    string dateString = Encoding.UTF8.GetString(stringBuffer, 0, posWordEnd[1] + 1).Replace(',', '.');

                                    //Пытаемся перевести слова в дату и число
                                    if (DateTime.TryParse(dateString, out DateTime date) && ulong.TryParse(Encoding.UTF8.GetString(stringBuffer, posWordStart[1], posWordEnd[2] - posWordStart[1] + 1), out ulong number))
                                    {
                                        //Записываем разницу между двумя датами в миллисекундах
                                        temporaryStream.Write(Encoding.UTF8.GetBytes(date.Subtract(oldDate).TotalMilliseconds.ToString()));
                                        //0x20 - пробел
                                        temporaryStream.WriteByte(0x20);
                                        //Записываем разницу чисел
                                        temporaryStream.Write(Encoding.UTF8.GetBytes((number - oldNumber).ToString()));
                                        temporaryStream.WriteByte(0x20);
                                        oldDate   = date;
                                        oldNumber = number;
                                        //Записываем оставшуюся строку
                                        temporaryStream.Write(stringBuffer, posWordStart[2], sbSize - posWordStart[2]);
                                    }
                                    else
                                    {
                                        //0x2E - точка = строка не сжата
                                        temporaryStream.WriteByte(0x2E);
                                        temporaryStream.Write(stringBuffer, 0, sbSize);
                                    }
                                }
                                else
                                {
                                    //0x2E - точка = строка не сжата
                                    temporaryStream.WriteByte(0x2E);
                                    temporaryStream.Write(stringBuffer, 0, sbSize);
                                }
                                //Т.к. запись произведена - обнуляем счётчики
                                pwsSize = pweSize = sbSize = 0;
                            }
                            else if (state == StateString.NotFirstFullString || state == StateString.UselessString)
                            {
                                //Просто записываем строку, т.к. нет данных для сжатия
                                temporaryStream.Write(stringBuffer, 0, sbSize);
                                //Т.к. запись произведена - обнуляем счётчики
                                pwsSize = pweSize = sbSize = 0;
                            }
                        }
                        //Считываем новую строку
                        mbSize = inputStream.Read(mainBuffer, 0, bufferSize);
                    }

                    //Если по окончании считывания осталась необработанная строка во вспомогательном буффере
                    if (state == StateString.UnreadString)
                    {
                        //Если количество слов достаточно
                        if (pwsSize > 2 && pweSize > 2)
                        {
                            //Получаем строку с датой
                            string dateString = Encoding.UTF8.GetString(stringBuffer, 0, posWordEnd[1] + 1).Replace(',', '.');

                            //Пытаемся перевести слова в дату и число
                            if (DateTime.TryParse(dateString, out DateTime date) && ulong.TryParse(Encoding.UTF8.GetString(stringBuffer, posWordStart[1], posWordEnd[2] - posWordStart[1] + 1), out ulong number))
                            {
                                //Записываем разницу между двумя датами в миллисекундах
                                temporaryStream.Write(Encoding.UTF8.GetBytes(date.Subtract(oldDate).TotalMilliseconds.ToString()));
                                //0x20 - пробел
                                temporaryStream.WriteByte(0x20);
                                //Записываем разницу чисел
                                temporaryStream.Write(Encoding.UTF8.GetBytes((number - oldNumber).ToString()));
                                temporaryStream.WriteByte(0x20);
                                oldDate   = date;
                                oldNumber = number;
                                //Записываем оставшуюся строку
                                temporaryStream.Write(stringBuffer, posWordStart[2], sbSize - posWordStart[2]);
                            }
                            else
                            {
                                //0x2E - точка = строка не сжата
                                temporaryStream.WriteByte(0x2E);
                                temporaryStream.Write(stringBuffer, 0, sbSize);
                            }
                        }
                        else
                        {
                            //0x2E - точка = строка не сжата
                            temporaryStream.WriteByte(0x2E);
                            temporaryStream.Write(stringBuffer, 0, sbSize);
                        }
                    }
                }
        }
Exemplo n.º 9
0
 public ParserTask(ConcurrentQueue<TextBlock> inqueue, ConcurrentQueue<Token> outqueue)
 {
     this.inqueue = inqueue;
     this.outqueue = outqueue;
     this.taskToken = new CancellationTokenSource();
     this.task = new Task(this.Loop, this.taskToken.Token);
     this.tokens = new Stack<ITk>();
     this.idsHg = new LinkedList<Token>();
     this.keywordsHg = new LinkedList<Token>();
     this.text = new StateString<ITk, NoneTk>();
     this.Start = task.Start;
 }
Exemplo n.º 10
0
 internal static extern IntPtr GetStringInternal(StateString parameter);
Exemplo n.º 11
0
        //Getters

        public static string GetString(StateString parameter) => Marshal.PtrToStringAnsi(GetStringInternal(parameter));