diff --git a/include/util/packed_vector.hpp b/include/util/packed_vector.hpp index 885b5fd70..d6c28e68d 100644 --- a/include/util/packed_vector.hpp +++ b/include/util/packed_vector.hpp @@ -25,7 +25,7 @@ class PackedVector public: PackedVector() = default; - void insert(OSMNodeID incoming_node_id) + void push_back(OSMNodeID incoming_node_id) { std::uint64_t node_id = static_cast(incoming_node_id); // mask incoming values, just in case they are > bitsize @@ -61,7 +61,7 @@ class PackedVector num_elements++; } - OSMNodeID retrieve(const std::size_t &a_index) const + OSMNodeID at(const std::size_t &a_index) const { BOOST_ASSERT(a_index < num_elements); @@ -102,6 +102,21 @@ class PackedVector } } + std::size_t size() const + { + return num_elements; + } + + void reserve(std::size_t capacity) + { + vec.reserve(ceil(float(capacity) / ELEMSIZE) * BITSIZE); + } + + std::size_t capacity() const + { + return floor(float(vec.capacity()) / BITSIZE) * ELEMSIZE; + } + private: std::vector vec; std::size_t num_elements = 0; diff --git a/unit_tests/util/packed_vector.cpp b/unit_tests/util/packed_vector.cpp index e8490c5b4..9995c7be0 100644 --- a/unit_tests/util/packed_vector.cpp +++ b/unit_tests/util/packed_vector.cpp @@ -21,14 +21,27 @@ BOOST_AUTO_TEST_CASE(insert_and_retrieve_packed_test) { OSMNodeID r = static_cast(rand() % 2147483647); // max 33-bit uint - packed_ids.insert(r); + packed_ids.push_back(r); original_ids.push_back(r); } for (std::size_t i = 0; i < num_test_cases; i++) { - BOOST_CHECK_EQUAL(original_ids.at(i), packed_ids.retrieve(i)); + BOOST_CHECK_EQUAL(original_ids.at(i), packed_ids.at(i)); } } +BOOST_AUTO_TEST_CASE(packed_vector_capacity_test) +{ + PackedVector packed_vec; + const std::size_t original_size = packed_vec.capacity(); + std::vector dummy_vec; + + BOOST_CHECK_EQUAL(original_size, dummy_vec.capacity()); + + packed_vec.reserve(100); + + BOOST_CHECK(packed_vec.capacity() >= 100); +} + BOOST_AUTO_TEST_SUITE_END()