Fixed jumping between bookmarks. Also use binary search for finding if row is bookmarked or not

This commit is contained in:
Daniel Collin 2012-12-31 13:34:35 +01:00
parent f6a94f38b5
commit 807ed05721

View File

@ -159,16 +159,26 @@ void TrackData_setActiveTrack(TrackData* trackData, int track)
bool TrackData_hasBookmark(TrackData* trackData, int row) bool TrackData_hasBookmark(TrackData* trackData, int row)
{ {
int i, count = trackData->bookmarkCount; int middle, first, last;
int* bookmarks = trackData->bookmarks; int* bookmarks = trackData->bookmarks;
if (!bookmarks) if (!bookmarks)
return false; return false;
for (i = 0; i < count; ++i) first = 0;
last = trackData->bookmarkCount - 1;
middle = (first + last) / 2;
while (first <= last)
{ {
if (bookmarks[i] == row) if (bookmarks[middle] < row)
first = middle + 1;
else if (bookmarks[middle] == row)
return true; return true;
else
last = middle - 1;
middle = (first + last) / 2;
} }
return false; return false;
@ -242,13 +252,12 @@ int TrackData_getNextBookmark(TrackData* trackData, int row)
if (!bookmarks) if (!bookmarks)
return trackData->endRow; return trackData->endRow;
for (i = 0; i < count - 1; ++i) for (i = 0; i < count; ++i)
{ {
const int v0 = bookmarks[i + 0]; const int v = bookmarks[i];
const int v1 = bookmarks[i + 1];
if (row >= v0 && row < v1) if (v > row)
return v1; return v;
} }
return trackData->endRow; return trackData->endRow;
@ -264,12 +273,12 @@ int TrackData_getPrevBookmark(TrackData* trackData, int row)
if (!bookmarks) if (!bookmarks)
return trackData->startRow; return trackData->startRow;
for (i = count; i > 0; --i) for (i = count; i >= 0; --i)
{ {
const int v0 = bookmarks[i]; const int v = bookmarks[i];
if (v0 < row) if (v < row)
return v0; return v;
} }
return trackData->startRow; return trackData->startRow;