New StableVector but Iterator is missing.
This commit is contained in:
@@ -13,8 +13,8 @@
|
||||
|
||||
namespace OpenVulkano
|
||||
{
|
||||
template<typename K, typename V, typename Pair = std::pair<K, V>, typename Vec = std::vector<Pair>,
|
||||
typename = std::enable_if_t<std::is_integral<K>::value>>
|
||||
template<typename K, typename V, template<typename, typename> class Pair = std::pair,
|
||||
template<typename> class Vec = std::vector, typename = std::enable_if_t<std::is_integral<K>::value>>
|
||||
class BinSearchArrayMap
|
||||
{
|
||||
public:
|
||||
@@ -44,8 +44,8 @@ namespace OpenVulkano
|
||||
|
||||
void Remove(const K key)
|
||||
{
|
||||
auto& it = FindPair(key);
|
||||
m_data.erase(it);
|
||||
std::streamsize index = FindIndexInVector(key);
|
||||
m_data.erase(m_data.begin() + index);
|
||||
}
|
||||
|
||||
size_t Size() const { return m_data.size(); }
|
||||
@@ -54,10 +54,10 @@ namespace OpenVulkano
|
||||
|
||||
V& Get(const K key) { return FindPair(key).second; }
|
||||
|
||||
Pair& FindPair(const K key)
|
||||
Pair<K, V>& FindPair(const K key)
|
||||
{
|
||||
size_t low = 0;
|
||||
size_t high = m_data.size() - 1;
|
||||
size_t high = m_data.size();
|
||||
|
||||
while (low <= high)
|
||||
{
|
||||
@@ -65,7 +65,33 @@ namespace OpenVulkano
|
||||
|
||||
if (m_data[mid].first == key)
|
||||
{
|
||||
return m_data[mid]; // The difference
|
||||
return m_data[mid];
|
||||
}
|
||||
else if (m_data[mid].first < key)
|
||||
{
|
||||
low = mid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
high = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
throw std::runtime_error("Key not found.");
|
||||
}
|
||||
|
||||
std::streamsize FindIndexInVector(const K key)
|
||||
{
|
||||
size_t low = 0;
|
||||
size_t high = m_data.size();
|
||||
|
||||
while (low <= high)
|
||||
{
|
||||
size_t mid = low + (high - low) / 2;
|
||||
|
||||
if (m_data[mid].first == key)
|
||||
{
|
||||
return mid;
|
||||
}
|
||||
else if (m_data[mid].first < key)
|
||||
{
|
||||
@@ -77,13 +103,38 @@ namespace OpenVulkano
|
||||
}
|
||||
}
|
||||
|
||||
throw std::runtime_error("Key not found.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool Contains(const K key) const { return true; }
|
||||
bool Contains(const V& value) const { return true; }
|
||||
bool Contains(const K key) const noexcept
|
||||
{
|
||||
size_t low = 0;
|
||||
size_t high = m_data.size();
|
||||
|
||||
while (low <= high)
|
||||
{
|
||||
size_t mid = low + (high - low) / 2;
|
||||
|
||||
if (m_data[mid].first == key)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (m_data[mid].first < key)
|
||||
{
|
||||
low = mid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
high = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Clear() { m_data.clear(); }
|
||||
|
||||
private:
|
||||
Vec m_data;
|
||||
Vec<Pair<K, V>> m_data;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user