projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added carbonaccessors.o
[wxWidgets.git]
/
src
/
common
/
dynarray.cpp
diff --git
a/src/common/dynarray.cpp
b/src/common/dynarray.cpp
index 5b4d11e9b9c5ef8a071123d16e53c5278eb4c77c..2d8e1623780eb18101892a366b9eb048b60fc184 100644
(file)
--- a/
src/common/dynarray.cpp
+++ b/
src/common/dynarray.cpp
@@
-73,14
+73,7
@@
wxBaseArray::wxBaseArray(const wxBaseArray& src)
// assignment operator
wxBaseArray& wxBaseArray::operator=(const wxBaseArray& src)
{
// assignment operator
wxBaseArray& wxBaseArray::operator=(const wxBaseArray& src)
{
-#if 0
wxDELETEA(m_pItems);
wxDELETEA(m_pItems);
-#else
- if ( (m_pItems)) {
- delete (m_pItems);
- (m_pItems) = 0;
- }
-#endif
m_nSize = // not src.m_nSize to save memory
m_nCount = src.m_nCount;
m_nSize = // not src.m_nSize to save memory
m_nCount = src.m_nCount;
@@
-189,8
+182,8
@@
int wxBaseArray::Index(long lItem, bool bFromEnd) const
return wxNOT_FOUND;
}
return wxNOT_FOUND;
}
-// search for a
n item in
a sorted array (binary search)
-
int wxBaseArray::Index
(long lItem, CMPFUNC fnCompare) const
+// search for a
place to insert an item into
a sorted array (binary search)
+
size_t wxBaseArray::IndexForInsert
(long lItem, CMPFUNC fnCompare) const
{
size_t i,
lo = 0,
{
size_t i,
lo = 0,
@@
-205,12
+198,23
@@
int wxBaseArray::Index(long lItem, CMPFUNC fnCompare) const
hi = i;
else if ( res > 0 )
lo = i + 1;
hi = i;
else if ( res > 0 )
lo = i + 1;
- else
- return i;
+ else {
+ lo = i;
+ break;
+ }
}
}
- return
wxNOT_FOUND
;
+ return
lo
;
}
}
+
+// search for an item in a sorted array (binary search)
+int wxBaseArray::Index(long lItem, CMPFUNC fnCompare) const
+{
+ size_t n = IndexForInsert(lItem, fnCompare);
+
+ return n < m_nCount && m_pItems[n] == lItem ? (int)n : wxNOT_FOUND;
+}
+
// add item at the end
void wxBaseArray::Add(long lItem)
{
// add item at the end
void wxBaseArray::Add(long lItem)
{
@@
-221,28
+225,7
@@
void wxBaseArray::Add(long lItem)
// add item assuming the array is sorted with fnCompare function
void wxBaseArray::Add(long lItem, CMPFUNC fnCompare)
{
// add item assuming the array is sorted with fnCompare function
void wxBaseArray::Add(long lItem, CMPFUNC fnCompare)
{
- size_t i,
- lo = 0,
- hi = m_nCount;
- int res;
-
- while ( lo < hi ) {
- i = (lo + hi)/2;
-
- res = (*fnCompare)((const void *)lItem, (const void *)m_pItems[i]);
- if ( res < 0 )
- hi = i;
- else if ( res > 0 )
- lo = i + 1;
- else {
- lo = hi = i;
- break;
- }
- }
-
- wxASSERT( lo == hi ); // I hope I got binary search right :-)
-
- Insert(lItem, lo);
+ Insert(lItem, IndexForInsert(lItem, fnCompare));
}
// add item at the given position
}
// add item at the given position