private int SearchOffset(BinaryReader br)
    {
        byte[] haystack = null;
        bool   found    = false;
        int    offset   = 0;
        int    basepos  = 0;
        int    hlength  = 256;

        while (!((found | offset >= br.BaseStream.Length)))
        {
            br.BaseStream.Position = offset;
            basepos = offset;
            //keep basepos but don't wanna cast Long downto Integer
            //offset = 0
            haystack = br.ReadBytes(hlength);
            offset   = BoyerMooreHorspool.find(haystack, m_Header);
            found    = offset >= 0;
            if (found)
            {
                offset += basepos;
                break;     // TODO: might not be correct. Was : Exit Do
            }
            else
            {
                offset += hlength - m_Header.Length;
            }
        }
        return(offset);
    }
    private long SearchOffset(BinaryReader br)
    {
        byte[] haystack     = null;
        bool   found        = false;
        long   offset       = 0;
        long   basepos      = 0;
        int    hlength      = 260;
        long   basepos_grow = hlength - m_Header.Length;

        while (!(found || (basepos >= br.BaseStream.Length)))
        {
            br.BaseStream.Position = basepos;
            haystack = br.ReadBytes(hlength);
            offset   = BoyerMooreHorspool.find(haystack, m_Header);
            found    = offset >= 0;
            if (found)
            {
                offset += basepos;
                break;
            }
            else
            {
                basepos += basepos_grow;
            }
        }
        return(offset);
    }
Beispiel #3
0
        public void CreateStringWithMatchingCharactersAtEnd()
        {
            var message    = "we have found the truth";
            var wordToFind = "truth";

            var bmhp   = new BoyerMooreHorspool(message);
            var result = bmhp.Found(wordToFind);

            Assert.IsTrue(result);
        }
Beispiel #4
0
        public void CreateStringWithNoMatchingCharactersSecond()
        {
            var message    = "hruth is nowhere because it is miss spelled";
            var wordToFind = "truth";

            var bmhp   = new BoyerMooreHorspool(message);
            var result = bmhp.Found(wordToFind);

            Assert.IsFalse(result);
        }
Beispiel #5
0
        public void CreateStringWithMatchingCharactersAtStart()
        {
            var message    = "truth is everywhere";
            var wordToFind = "truth";

            var bmhp   = new BoyerMooreHorspool(message);
            var result = bmhp.Found(wordToFind);

            Assert.IsTrue(result);
        }
Beispiel #6
0
        public void SSBoyerMooreHorspool()
        {
            BoyerMooreHorspool         BMH     = new BoyerMooreHorspool();
            IEnumerable <ISearchMatch> result1 = BMH.Search(find1, test);

            Assert.AreEqual(exp1.Length, result1.First <ISearchMatch>().Length);
            Assert.AreEqual(exp1.Start, result1.First <ISearchMatch>().Start);

            IEnumerable <ISearchMatch> result2 = BMH.Search(find2, test);

            Assert.AreEqual(exp2.Length, result2.First <ISearchMatch>().Length);
            Assert.AreEqual(exp2.Start, result2.First <ISearchMatch>().Start);
        }
        private int GetOffset(IMemoryPattern pattern)
        {
            switch (pattern.Algorithm)
            {
            case PatternScannerAlgorithm.BoyerMooreHorspool:
                return(BoyerMooreHorspool.IndexOf(Data, pattern.GetBytes().ToArray()));

            case PatternScannerAlgorithm.Naive:
                return(Naive.GetIndexOf(pattern, Data, _module));
            }

            throw new NotImplementedException("GetOffset encountered an unknown PatternScannerAlgorithm: " +
                                              pattern.Algorithm + ".");
        }