From 128cb2f6f3a4b06014c7cce7664849b552bedcc1 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Wed, 19 Nov 2008 04:41:51 +0000 Subject: [PATCH] Minor optimization: since our list items cache their position information, take advantage of this fact to make use of binary search in IndexOf(BListItem *), rather than using BList's linear search. Also use this mechanism to speed up HasItem(BListItem *). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28694 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/ListView.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp index 1d56b62fa8..761f81f226 100644 --- a/src/kits/interface/ListView.cpp +++ b/src/kits/interface/ListView.cpp @@ -733,7 +733,13 @@ BListView::ItemAt(int32 index) const int32 BListView::IndexOf(BListItem *item) const { - return fList.IndexOf(item); + if (item != NULL) { + BPoint point(0.0, item->Top()); + int32 index = IndexOf(point); + if (index >= 0 && fList.ItemAt(index) == item) + return index; + } + return -1; } // IndexOf @@ -779,7 +785,7 @@ BListView::LastItem() const bool BListView::HasItem(BListItem *item) const { - return fList.HasItem(item); + return IndexOf(item) != -1; } // CountItems