private void RefreshTable(RezultRefreshType refreshType)
        {
            if (!InitProcessManager())
            {
                return;
            }

            var memory   = PManager.GetMemoryForProcess();
            var comparer = Scanner.GetValueReaderByDataType(ViewModel.SelectedDataType, memory, ViewModel);

            var startPointer = new IntPtr(ViewModel.StartSearchAddress);

            var convertedCompareValue = comparer.ConvertToComparableValue(ViewModel.ScanValue);

            foreach (var pointer in ViewModel.VisibleResults.ToList())
            {
                if (!comparer.CheckTableRezult(pointer, startPointer, convertedCompareValue, refreshType))
                {
                    ViewModel.VisibleResults.Remove(pointer);
                }
            }
        }
        public bool CheckTableRezult(VisibleResult rezult, IntPtr baseAddress, IComparable compareValue, RezultRefreshType refreshType)
        {
            var processingPointer = baseAddress;

            for (var i = 0; i < rezult.Offsets.Count; i++)
            {
                var offset = rezult.Offsets[i];

                //if (offset == rezult.Offsets.Last())  //I nade huge nistake -_\
                if (i == rezult.Offsets.Count - 1)
                {
                    processingPointer += offset;
                    break;
                }

                processingPointer = M.ReadPointer(processingPointer + offset);

                if (M.CheckPointer(processingPointer) != SectionCategory.HEAP)
                {
                    if (refreshType == RezultRefreshType.DeleteBroken || refreshType == RezultRefreshType.FilterValues)
                    {
                        return(false);
                    }
                    else if (refreshType == RezultRefreshType.RefreshValues)
                    {
                        rezult.Value   = "-";
                        rezult.Address = "-";
                        return(true);
                    }
                    else
                    {
                        ThrowRefreshTypeException(refreshType);
                    }
                }
            }

            if (refreshType == RezultRefreshType.DeleteBroken)
            {
                return(true);
            }


            if (refreshType == RezultRefreshType.FilterValues)
            {
                if (MVM.SelectedDataType == DataType.String || MVM.SelectedDataType == DataType.StringU)
                {
                    var readDisplayValue = ReadDisplayString(processingPointer);
                    var compareString    = (string)compareValue;
                    if (MVM.StringIgnoreCase)
                    {
                        compareString    = compareString.ToLower();
                        readDisplayValue = readDisplayValue.ToLower();
                    }

                    if (MVM.StringCompareType == StringCompareType.Contains)
                    {
                        if (!readDisplayValue.Contains(compareString))
                        {
                            return(false);
                        }
                    }
                    else if (MVM.StringCompareType == StringCompareType.StartWith)
                    {
                        if (!readDisplayValue.StartsWith(compareString))
                        {
                            return(false);
                        }
                    }
                    else if (MVM.StringCompareType == StringCompareType.EndsWith)
                    {
                        if (!readDisplayValue.EndsWith(compareString))
                        {
                            return(false);
                        }
                    }
                    else if (MVM.StringCompareType == StringCompareType.Equal)
                    {
                        if (compareString != readDisplayValue)
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    var compValue = ReadComparable(processingPointer);

                    if (!CheckSatisfies(compareValue, compValue))
                    {
                        return(false);
                    }

                    var readDisplayValue = ReadDisplayString(processingPointer);
                    rezult.Value   = readDisplayValue;
                    rezult.Address = processingPointer.ToString("x");
                }
            }
            else if (refreshType == RezultRefreshType.RefreshValues)
            {
                var readDisplayValue = ReadDisplayString(processingPointer);
                rezult.Value   = readDisplayValue;
                rezult.Address = processingPointer.ToString("x");
            }
            else
            {
                ThrowRefreshTypeException(refreshType);
            }

            return(true);
        }
 public static void ThrowRefreshTypeException(RezultRefreshType refreshType)
 {
     throw new NotImplementedException("Result refresh type is not implemented in code: " + refreshType);
 }