mirror of
https://github.com/BlackMATov/flat.hpp.git
synced 2025-12-13 01:36:27 +07:00
add get_allocator methods
This commit is contained in:
@@ -133,6 +133,10 @@ namespace flat_hpp
|
||||
insert(ilist);
|
||||
}
|
||||
|
||||
allocator_type get_allocator() const {
|
||||
return data_.get_allocator();
|
||||
}
|
||||
|
||||
iterator begin() noexcept { return data_.begin(); }
|
||||
const_iterator begin() const noexcept { return data_.begin(); }
|
||||
const_iterator cbegin() const noexcept { return data_.cbegin(); }
|
||||
|
||||
@@ -18,9 +18,11 @@ namespace
|
||||
using value_type = T;
|
||||
|
||||
dummy_allocator() = default;
|
||||
dummy_allocator(int i) : i(i) {}
|
||||
|
||||
template < typename U >
|
||||
dummy_allocator(const dummy_allocator<U>&) noexcept {
|
||||
dummy_allocator(const dummy_allocator<U>& o) noexcept {
|
||||
i = o.i;
|
||||
}
|
||||
|
||||
T* allocate(std::size_t n) noexcept {
|
||||
@@ -31,6 +33,8 @@ namespace
|
||||
(void)n;
|
||||
std::free(p);
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
};
|
||||
|
||||
template < typename T, typename U >
|
||||
@@ -100,6 +104,9 @@ TEST_CASE("flat_map") {
|
||||
std::greater<int>,
|
||||
alloc_t>;
|
||||
|
||||
using vec_t = std::vector<
|
||||
std::pair<int,unsigned>>;
|
||||
|
||||
{
|
||||
auto s0 = map_t();
|
||||
auto s1 = map2_t(alloc_t());
|
||||
@@ -108,8 +115,6 @@ TEST_CASE("flat_map") {
|
||||
}
|
||||
|
||||
{
|
||||
using vec_t = std::vector<std::pair<int,unsigned>>;
|
||||
|
||||
vec_t v{{1,30},{2,20},{3,10}};
|
||||
auto s0 = map_t(v.cbegin(), v.cend());
|
||||
auto s1 = map2_t(v.cbegin(), v.cend(), alloc_t());
|
||||
@@ -127,6 +132,18 @@ TEST_CASE("flat_map") {
|
||||
auto s1 = map_t({{0,1}, {1,2}}, alloc_t());
|
||||
auto s2 = map_t({{0,1}, {1,2}}, std::less<int>());
|
||||
auto s3 = map_t({{0,1}, {1,2}}, std::less<int>(), alloc_t());
|
||||
|
||||
REQUIRE(vec_t(s0.begin(), s0.end()) == vec_t({{0,1},{1,2}}));
|
||||
REQUIRE(vec_t(s1.begin(), s1.end()) == vec_t({{0,1},{1,2}}));
|
||||
REQUIRE(vec_t(s2.begin(), s2.end()) == vec_t({{0,1},{1,2}}));
|
||||
REQUIRE(vec_t(s3.begin(), s3.end()) == vec_t({{0,1},{1,2}}));
|
||||
}
|
||||
|
||||
{
|
||||
auto s0 = map_t();
|
||||
auto s1 = map_t(alloc_t(42));
|
||||
REQUIRE(s0.get_allocator().i == 0);
|
||||
REQUIRE(s1.get_allocator().i == 42);
|
||||
}
|
||||
}
|
||||
SECTION("capacity") {
|
||||
|
||||
@@ -111,6 +111,10 @@ namespace flat_hpp
|
||||
insert(ilist);
|
||||
}
|
||||
|
||||
allocator_type get_allocator() const {
|
||||
return data_.get_allocator();
|
||||
}
|
||||
|
||||
iterator begin() noexcept { return data_.begin(); }
|
||||
const_iterator begin() const noexcept { return data_.begin(); }
|
||||
const_iterator cbegin() const noexcept { return data_.cbegin(); }
|
||||
|
||||
@@ -18,9 +18,11 @@ namespace
|
||||
using value_type = T;
|
||||
|
||||
dummy_allocator() = default;
|
||||
dummy_allocator(int i) : i(i) {}
|
||||
|
||||
template < typename U >
|
||||
dummy_allocator(const dummy_allocator<U>&) noexcept {
|
||||
dummy_allocator(const dummy_allocator<U>& o) noexcept {
|
||||
i = o.i;
|
||||
}
|
||||
|
||||
T* allocate(std::size_t n) noexcept {
|
||||
@@ -31,6 +33,8 @@ namespace
|
||||
(void)n;
|
||||
std::free(p);
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
};
|
||||
|
||||
template < typename T, typename U >
|
||||
@@ -85,6 +89,7 @@ TEST_CASE("flat_set") {
|
||||
using alloc_t = dummy_allocator<int>;
|
||||
using set_t = flat_set<int, std::less<int>, alloc_t>;
|
||||
using set2_t = flat_set<int, std::greater<int>, alloc_t>;
|
||||
using vec_t = std::vector<int>;
|
||||
|
||||
{
|
||||
auto s0 = set_t();
|
||||
@@ -94,16 +99,16 @@ TEST_CASE("flat_set") {
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<int> v{1,2,3};
|
||||
vec_t v{1,2,3};
|
||||
auto s0 = set_t(v.cbegin(), v.cend());
|
||||
auto s1 = set2_t(v.cbegin(), v.cend(), alloc_t());
|
||||
auto s2 = set_t(v.cbegin(), v.cend(), std::less<int>());
|
||||
auto s3 = set2_t(v.cbegin(), v.cend(), std::greater<int>(), alloc_t());
|
||||
|
||||
REQUIRE(std::vector<int>(s0.begin(), s0.end()) == std::vector<int>({1,2,3}));
|
||||
REQUIRE(std::vector<int>(s1.begin(), s1.end()) == std::vector<int>({3,2,1}));
|
||||
REQUIRE(std::vector<int>(s2.begin(), s2.end()) == std::vector<int>({1,2,3}));
|
||||
REQUIRE(std::vector<int>(s3.begin(), s3.end()) == std::vector<int>({3,2,1}));
|
||||
REQUIRE(vec_t(s0.begin(), s0.end()) == vec_t({1,2,3}));
|
||||
REQUIRE(vec_t(s1.begin(), s1.end()) == vec_t({3,2,1}));
|
||||
REQUIRE(vec_t(s2.begin(), s2.end()) == vec_t({1,2,3}));
|
||||
REQUIRE(vec_t(s3.begin(), s3.end()) == vec_t({3,2,1}));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -112,10 +117,17 @@ TEST_CASE("flat_set") {
|
||||
auto s2 = set_t({0,1,2}, std::less<int>());
|
||||
auto s3 = set2_t({0,1,2}, std::greater<int>(), alloc_t());
|
||||
|
||||
REQUIRE(std::vector<int>(s0.begin(), s0.end()) == std::vector<int>({0,1,2}));
|
||||
REQUIRE(std::vector<int>(s1.begin(), s1.end()) == std::vector<int>({2,1,0}));
|
||||
REQUIRE(std::vector<int>(s2.begin(), s2.end()) == std::vector<int>({0,1,2}));
|
||||
REQUIRE(std::vector<int>(s3.begin(), s3.end()) == std::vector<int>({2,1,0}));
|
||||
REQUIRE(vec_t(s0.begin(), s0.end()) == vec_t({0,1,2}));
|
||||
REQUIRE(vec_t(s1.begin(), s1.end()) == vec_t({2,1,0}));
|
||||
REQUIRE(vec_t(s2.begin(), s2.end()) == vec_t({0,1,2}));
|
||||
REQUIRE(vec_t(s3.begin(), s3.end()) == vec_t({2,1,0}));
|
||||
}
|
||||
|
||||
{
|
||||
auto s0 = set_t();
|
||||
auto s1 = set_t(alloc_t(42));
|
||||
REQUIRE(s0.get_allocator().i == 0);
|
||||
REQUIRE(s1.get_allocator().i == 42);
|
||||
}
|
||||
}
|
||||
SECTION("capacity") {
|
||||
|
||||
Reference in New Issue
Block a user