Пример #1
0
 public void ClearMatchUnits()
 {
     MatchUnits.Clear();
     BufferBytes.Clear();
     MaxDataLengthBytes     = 0;
     MinDataLengthBytes     = 0;
     ScanResult             = new ScanResult();
     BufferAsString         = string.Empty;
     ContainsTextSearchUnit = false;
     MatchUnitIsAddeded     = false;
 }
Пример #2
0
        public void AddToBuffer(int NewByte)
        {
            if (NewByte < 0)
            {
                return;
            }
            if (!MatchUnitIsAddeded)
            {
                throw new Exception("Список поисковых юнитов не может быть пустым");
            }

            BufferBytes.Add((byte)NewByte);
            BufferAsString = ContainsTextSearchUnit ? AdapterFileReader.EncodingMode.GetString(BufferBytes.ToArray()) : string.Empty;
            CheckData();

            if (ScanResult.SuccessMatch)
            {
                if (ScanResult.MatchUnit.ReplacementData != null)
                {
                    List <byte> clear_data_list_bytes = new List <byte>();
                    if (ScanResult.MatchUnit.GetType().IsSubclassOf(typeof(AbstractMatchUnitText)))
                    {
                        clear_data_list_bytes.AddRange(AdapterFileReader.EncodingMode.GetBytes(BufferAsString.Substring(0, ScanResult.MatchUnit.IndexOf)));

                        if (ScanResult.MatchUnit.ReplacementData.Count > 0)
                        {
                            clear_data_list_bytes.AddRange(ScanResult.MatchUnit.ReplacementData);
                        }

                        if (ScanResult.MatchUnit is MatchUnitRegexp)
                        {
                            clear_data_list_bytes.AddRange(AdapterFileReader.EncodingMode.GetBytes(BufferAsString.Substring(ScanResult.MatchUnit.IndexOf + ((MatchUnitRegexp)ScanResult.MatchUnit).DetectedMatch.Length)));
                        }
                        else
                        {
                            clear_data_list_bytes.AddRange(AdapterFileReader.EncodingMode.GetBytes(BufferAsString.Substring(ScanResult.MatchUnit.IndexOf + ((MatchUnitText)ScanResult.MatchUnit).SearchExpression.Length)));
                        }
                    }
                    else
                    {
                        if (ScanResult.MatchUnit.IndexOf > 0)
                        {
                            clear_data_list_bytes.AddRange(BufferBytes.Take(ScanResult.MatchUnit.IndexOf));
                        }

                        if (ScanResult.MatchUnit.ReplacementData.Count > 0)
                        {
                            clear_data_list_bytes.AddRange(ScanResult.MatchUnit.ReplacementData);
                        }

                        if (ScanResult.MatchUnit.IndexOf + ScanResult.MatchUnit.GetDetectedSearchData().Length < BufferBytes.Count)
                        {
                            clear_data_list_bytes.AddRange(BufferBytes.Skip(ScanResult.MatchUnit.IndexOf + ScanResult.MatchUnit.ReplacementData.Count));
                        }
                    }
                    int filteredDataCount = BufferBytes.Count - clear_data_list_bytes.Count;

                    FilteredDataCounter += filteredDataCount;
                    BufferBytes.Clear();
                    BufferBytes.AddRange(clear_data_list_bytes);
                    BufferAsString = ContainsTextSearchUnit ? AdapterFileReader.EncodingMode.GetString(BufferBytes.ToArray()) : string.Empty;
                }
            }
        }