Autoarr2 search

This commit is contained in:
Timerix22 2022-06-03 23:29:43 +03:00
parent d525270443
commit e63ce573ff

View File

@ -2,21 +2,30 @@
#include "../base/base.h" #include "../base/base.h"
#define Autoarr2_NO_REZULT -1
template <typename T> template <typename T>
class Autoarr2 { class Autoarr2 {
T** values; T** values;
public: public:
uint16 blocks_count; uint16 blocks_count;
uint16 block_length; uint16 block_length;
uint16 max_block_length; uint16 max_block_length;
uint32 length; uint32 length;
Autoarr2(); Autoarr2();
explicit Autoarr2(uint16 _max_block_length); explicit Autoarr2(uint16 _max_block_length);
virtual ~Autoarr2();
T* getptr(uint32 index); T* getptr(uint32 index);
T get(uint32 index); T get(uint32 index);
void set(uint32 index, T value); void set(uint32 index, T value);
void add(T value); void add(T value);
virtual ~Autoarr2(); // returns index of the first <value> inclusion
uint32 search(T& value);
uint32 search(T& value, uint32 fromIndex);
uint32 search(T& value, uint32 fromIndex, uint32 toIndex);
}; };
@ -36,6 +45,14 @@ Autoarr2<T>::Autoarr2(uint16 _max_block_length) : Autoarr2() {
max_block_length=_max_block_length; max_block_length=_max_block_length;
} }
template<typename T>
Autoarr2<T>::~Autoarr2() {
for (uint16 i=0;i<blocks_count;i++)
delete[] values[i];
delete[] values;
}
template<typename T> template<typename T>
T *Autoarr2<T>::getptr(uint32 index) { T *Autoarr2<T>::getptr(uint32 index) {
if(index>=length) throw_id(ERR_WRONGINDEX); if(index>=length) throw_id(ERR_WRONGINDEX);
@ -76,9 +93,22 @@ create_block:
length++; length++;
} }
template<typename T> template<typename T>
Autoarr2<T>::~Autoarr2() { uint32 Autoarr2<T>::search(T& value, uint32 fromIndex, uint32 toIndex){
for (uint16 i=0;i<blocks_count;i++) uint32 index=fromIndex;
delete[] values[i]; for(; index<toIndex; index++)
delete[] values; if(value==get(index))
return index;
return Autoarr2_NO_REZULT;
}
template<typename T>
uint32 Autoarr2<T>::search(T& value, uint32 fromIndex){
return search(value, fromIndex, length);
}
template<typename T>
uint32 Autoarr2<T>::search(T& value){
return search(value, 0, length);
} }