Partly revert previous commit. Works only for linear search functions, binary_search changes were wrong.

Sorry, didn't think it through. Seemed to work at first, but works only if sort() ended up creating the same sorting as is used then for search.
While often the case, this is obviously not guaranteed. And can't do sort per type easily (this works with flags which remember if sorting had been done).


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6399 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2022-05-14 18:53:28 +00:00
parent 0f7eb1f6e1
commit 06415994ce
2 changed files with 6 additions and 14 deletions

@ -1,7 +1,7 @@
--------------------------
Changes in 1.9 (not yet released)
- core::array search functions can now work with any types as long as corresponding operator= (linear_search) or operator< (binary_search) are implemented.
- core::array::linear_search and linear_reverse_search can now work with any types as long as corresponding operator= is implemented.
- Add checks for sane image sizes in some image loaders (so far: bmp, jpg, tga, png).
Thanks @sfan5 for the original patch (got modified a bit): https://github.com/minetest/irrlicht/commit/dbd39120e7ed8c0c97e48e2df62347627f3c1d42
- Add IImage::checkDataSizeLimit and make IImage getDataSizeFromFormat return size_t so image loaders can check if sizes are sane.

@ -432,12 +432,10 @@ public:
/** The array will be sorted before the binary search if it is not
already sorted. Caution is advised! Be careful not to call this on
unsorted const arrays, or the slower method will be used.
Only works if corresponding operator< is implemented.
\param element Element to search for.
\return Position of the searched element if it was found,
otherwise -1 is returned. */
template <class E>
s32 binary_search(const E& element)
s32 binary_search(const T& element)
{
sort();
return binary_search(element, 0, used-1);
@ -447,12 +445,10 @@ public:
//! Performs a binary search for an element if possible, returns -1 if not found.
/** This method is for const arrays and so cannot call sort(), if the array is
not sorted then linear_search will be used instead. Potentially very slow!
Only works if corresponding operator< is implemented.
\param element Element to search for.
\return Position of the searched element if it was found,
otherwise -1 is returned. */
template <class E>
s32 binary_search(const E& element) const
s32 binary_search(const T& element) const
{
if (is_sorted)
return binary_search(element, 0, used-1);
@ -462,14 +458,12 @@ public:
//! Performs a binary search for an element, returns -1 if not found.
/** Only works if corresponding operator< is implemented.
\param element: Element to search for.
/** \param element: Element to search for.
\param left First left index
\param right Last right index.
\return Position of the searched element if it was found, otherwise -1
is returned. */
template <class E>
s32 binary_search(const E& element, s32 left, s32 right) const
s32 binary_search(const T& element, s32 left, s32 right) const
{
if (!used)
return -1;
@ -503,13 +497,11 @@ public:
//! it is used for searching a multiset
/** The array will be sorted before the binary search if it is not
already sorted.
Only works if corresponding operator< is implemented.
\param element Element to search for.
\param &last return lastIndex of equal elements
\return Position of the first searched element if it was found,
otherwise -1 is returned. */
template <class E>
s32 binary_search_multi(const E& element, s32 &last)
s32 binary_search_multi(const T& element, s32 &last)
{
sort();
s32 index = binary_search(element, 0, used-1);