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)
{
int i, count = trackData->bookmarkCount;
int middle, first, last;
int* bookmarks = trackData->bookmarks;
if (!bookmarks)
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;
else
last = middle - 1;
middle = (first + last) / 2;
}
return false;
@ -242,13 +252,12 @@ int TrackData_getNextBookmark(TrackData* trackData, int row)
if (!bookmarks)
return trackData->endRow;
for (i = 0; i < count - 1; ++i)
for (i = 0; i < count; ++i)
{
const int v0 = bookmarks[i + 0];
const int v1 = bookmarks[i + 1];
const int v = bookmarks[i];
if (row >= v0 && row < v1)
return v1;
if (v > row)
return v;
}
return trackData->endRow;
@ -264,12 +273,12 @@ int TrackData_getPrevBookmark(TrackData* trackData, int row)
if (!bookmarks)
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)
return v0;
if (v < row)
return v;
}
return trackData->startRow;