fixes data structure tests:
- MapStorage: fix returned index in peek_index() on fail - UnorderedMapStorage: fix returned index in peek_index() on fail - BinaryHeap: auto-deduce Index type - ArrayStorage: replace raw array with std::vector
This commit is contained in:
parent
6dabf4507a
commit
6e138bbf54
@ -36,17 +36,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class ArrayStorage
|
template <typename NodeID, typename Key> class ArrayStorage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit ArrayStorage(size_t size) : positions(new Key[size])
|
explicit ArrayStorage(size_t size) : positions(size, 0)
|
||||||
{
|
{
|
||||||
memset(positions, 0, size * sizeof(Key));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~ArrayStorage() { delete[] positions; }
|
~ArrayStorage() { }
|
||||||
|
|
||||||
Key &operator[](NodeID node) { return positions[node]; }
|
Key &operator[](NodeID node) { return positions[node]; }
|
||||||
|
|
||||||
@ -58,7 +56,7 @@ template <typename NodeID, typename Key> class ArrayStorage
|
|||||||
void Clear() {}
|
void Clear() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Key *positions;
|
std::vector<Key> positions;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class MapStorage
|
template <typename NodeID, typename Key> class MapStorage
|
||||||
@ -73,11 +71,11 @@ template <typename NodeID, typename Key> class MapStorage
|
|||||||
Key peek_index(const NodeID node) const
|
Key peek_index(const NodeID node) const
|
||||||
{
|
{
|
||||||
const auto iter = nodes.find(node);
|
const auto iter = nodes.find(node);
|
||||||
if (std::end(nodes) != iter)
|
if (nodes.end() != iter)
|
||||||
{
|
{
|
||||||
return iter->second;
|
return iter->second;
|
||||||
}
|
}
|
||||||
return Key(-1);
|
return std::numeric_limits<Key>::max();
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
std::map<NodeID, Key> nodes;
|
std::map<NodeID, Key> nodes;
|
||||||
@ -97,7 +95,7 @@ template <typename NodeID, typename Key> class UnorderedMapStorage
|
|||||||
{
|
{
|
||||||
return iter->second;
|
return iter->second;
|
||||||
}
|
}
|
||||||
return Key(-1);
|
return std::numeric_limits<Key>::max();
|
||||||
}
|
}
|
||||||
|
|
||||||
Key const &operator[](const NodeID node) const
|
Key const &operator[](const NodeID node) const
|
||||||
@ -179,9 +177,9 @@ class BinaryHeap
|
|||||||
return inserted_nodes[index].key == 0;
|
return inserted_nodes[index].key == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WasInserted(const NodeID node)
|
bool WasInserted(const NodeID node) const
|
||||||
{
|
{
|
||||||
const Key index = node_index.peek_index(node);
|
const auto index = node_index.peek_index(node);
|
||||||
if (index >= static_cast<Key>(inserted_nodes.size()))
|
if (index >= static_cast<Key>(inserted_nodes.size()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user