add dummy insert interface

This commit is contained in:
2019-05-04 10:45:06 +07:00
parent 33fd5f964a
commit 49dff175dd
4 changed files with 90 additions and 8 deletions

View File

@@ -96,19 +96,30 @@ namespace flat_hpp
iterator begin() noexcept { return data_.begin(); }
const_iterator begin() const noexcept { return data_.begin(); }
const_iterator cbegin() const noexcept { return data_.cbegin(); }
iterator end() noexcept { return data_.end(); }
const_iterator end() const noexcept { return data_.end(); }
const_iterator cend() const noexcept { return data_.cend(); }
reverse_iterator rbegin() noexcept { return data_.rbegin(); }
const_reverse_iterator rbegin() const noexcept { return data_.rbegin(); }
const_reverse_iterator crbegin() const noexcept { return data_.crbegin(); }
reverse_iterator rend() noexcept { return data_.rend(); }
const_reverse_iterator rend() const noexcept { return data_.rend(); }
const_reverse_iterator crend() const noexcept { return data_.crend(); }
std::pair<iterator, bool> insert(value_type&& value) {
template < typename P
, typename = std::enable_if_t<std::is_constructible<value_type, P>::value> >
std::pair<iterator, bool> insert(P&& p) {
//TODO(BlackMat): implme
return std::make_pair(end(), false);
}
std::pair<iterator, bool> insert(const value_type& value) {
template < typename P
, typename = std::enable_if_t<std::is_constructible<value_type, P>::value> >
std::pair<iterator, bool> insert(const_iterator hint, P&& p) {
//TODO(BlackMat): implme
return std::make_pair(end(), false);
}
@@ -119,6 +130,18 @@ namespace flat_hpp
insert(*iter);
}
}
template < typename... Args >
std::pair<iterator, bool> emplace(Args&&... args) {
//TODO(BlackMat): implme
return insert(value_type(std::forward<Args>(args)...));
}
template < typename... Args >
std::pair<iterator, bool> emplace_hint(const_iterator hint, Args&&... args) {
//TODO(BlackMat): implme
return insert(value_type(std::forward<Args>(args)...));
}
private:
data_type data_;
key_compare compare_;

View File

@@ -30,7 +30,7 @@ namespace
}
TEST_CASE("flat_map") {
{
SECTION("types") {
using map_t = flat_map<int, unsigned>;
static_assert(
@@ -64,7 +64,7 @@ TEST_CASE("flat_map") {
std::is_same<map_t::const_pointer, const std::pair<const int, unsigned>*>::value,
"unit test static error");
}
{
SECTION("ctors") {
using alloc_t = dummy_allocator<
std::pair<const int,unsigned>>;
@@ -96,4 +96,22 @@ TEST_CASE("flat_map") {
auto s3 = map_t({{0,1}, {1,2}}, std::less<int>(), alloc_t());
}
}
SECTION("inserts") {
struct obj_t {
obj_t(int i) : i(i) {}
int i;
};
using map_t = flat_map<int, obj_t>;
{
map_t s0;
s0.insert(std::make_pair(1, 42));
s0.insert(std::make_pair(2, obj_t(42)));
s0.insert(s0.cend(), std::make_pair(3, 84));
s0.insert(s0.cend(), std::make_pair(4, obj_t(84)));
s0.emplace(5, 100500);
s0.emplace_hint(s0.cend(), 6, 100500);
}
}
}

View File

@@ -95,19 +95,30 @@ namespace flat_hpp
iterator begin() noexcept { return data_.begin(); }
const_iterator begin() const noexcept { return data_.begin(); }
const_iterator cbegin() const noexcept { return data_.cbegin(); }
iterator end() noexcept { return data_.end(); }
const_iterator end() const noexcept { return data_.end(); }
const_iterator cend() const noexcept { return data_.cend(); }
reverse_iterator rbegin() noexcept { return data_.rbegin(); }
const_reverse_iterator rbegin() const noexcept { return data_.rbegin(); }
const_reverse_iterator crbegin() const noexcept { return data_.crbegin(); }
reverse_iterator rend() noexcept { return data_.rend(); }
const_reverse_iterator rend() const noexcept { return data_.rend(); }
const_reverse_iterator crend() const noexcept { return data_.crend(); }
std::pair<iterator, bool> insert(value_type&& value) {
template < typename P
, typename = std::enable_if_t<std::is_constructible<value_type, P>::value> >
std::pair<iterator, bool> insert(P&& p) {
//TODO(BlackMat): implme
return std::make_pair(end(), false);
}
std::pair<iterator, bool> insert(const value_type& value) {
template < typename P
, typename = std::enable_if_t<std::is_constructible<value_type, P>::value> >
std::pair<iterator, bool> insert(const_iterator hint, P&& p) {
//TODO(BlackMat): implme
return std::make_pair(end(), false);
}
@@ -118,6 +129,18 @@ namespace flat_hpp
insert(*iter);
}
}
template < typename... Args >
std::pair<iterator, bool> emplace(Args&&... args) {
//TODO(BlackMat): implme
return insert(value_type(std::forward<Args>(args)...));
}
template < typename... Args >
std::pair<iterator, bool> emplace_hint(const_iterator hint, Args&&... args) {
//TODO(BlackMat): implme
return insert(hint, value_type(std::forward<Args>(args)...));
}
private:
data_type data_;
key_compare compare_;

View File

@@ -30,7 +30,7 @@ namespace
}
TEST_CASE("flat_set") {
{
SECTION("types") {
using set_t = flat_set<int>;
static_assert(
@@ -61,7 +61,7 @@ TEST_CASE("flat_set") {
std::is_same<set_t::const_pointer, const int*>::value,
"unit test static error");
}
{
SECTION("ctors") {
using alloc_t = dummy_allocator<int>;
using set_t = flat_set<int, std::less<int>, alloc_t>;
@@ -87,4 +87,22 @@ TEST_CASE("flat_set") {
auto s3 = set_t({0,1,2}, std::less<int>(), alloc_t());
}
}
SECTION("inserts") {
struct obj_t {
obj_t(int i) : i(i) {}
int i;
};
using set_t = flat_set<obj_t>;
{
set_t s0;
s0.insert(42);
s0.insert(obj_t(42));
s0.insert(s0.cend(), 84);
s0.insert(s0.cend(), obj_t(84));
s0.emplace(100500);
s0.emplace_hint(s0.cend(), 100500);
}
}
}