]> granicus.if.org Git - taglib/commitdiff
This is much, much faster on large byte vectors and gets the current bug down
authorScott Wheeler <wheeler@kde.org>
Fri, 16 Jun 2006 20:36:36 +0000 (20:36 +0000)
committerScott Wheeler <wheeler@kde.org>
Fri, 16 Jun 2006 20:36:36 +0000 (20:36 +0000)
to where it can read the tag in around 18 seconds unstead of 30 minutes.

I'm going to see if I can find the other hot paths now...

CCBUG:122183

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@552178 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

toolkit/tbytevector.cpp

index 3deb8958881027b58cbece3cf3d8eb4a5cdb25cb..241a08c55eea886085b7e0124eae36a80938ef24 100644 (file)
@@ -92,29 +92,15 @@ namespace TagLib {
     if(pattern.size() > v.size() || offset >= v.size() - 1)
       return -1;
 
-    // if an offset was specified, just do a recursive call on the substring
-
-    if(offset > 0) {
-
-      // start at the next byte aligned block
-
-      Vector section = v.mid(offset + byteAlign - 1 - offset % byteAlign);
-      int match = section.find(pattern, 0, byteAlign);
-      return match >= 0 ? int(match + offset) : -1;
-    }
-
-    // this is a simplified Boyer-Moore string searching algorithm
-
     uchar lastOccurrence[256];
 
-
     for(uint i = 0; i < 256; ++i)
       lastOccurrence[i] = uchar(pattern.size());
 
     for(uint i = 0; i < pattern.size() - 1; ++i)
       lastOccurrence[unsigned(pattern[i])] = uchar(pattern.size() - i - 1);
 
-    for(uint i = pattern.size() - 1; i < v.size(); i += lastOccurrence[uchar(v.at(i))]) {
+    for(uint i = pattern.size() - 1 + offset; i < v.size(); i += lastOccurrence[uchar(v.at(i))]) {
       int iBuffer = i;
       int iPattern = pattern.size() - 1;