From 1cd889767e518d1bbb1bf8b226ee2c4dd3e85390 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 26 Sep 2022 08:53:34 -0700 Subject: Fix -Wimplicit-int-conversion and -Wsign-conversion warnings in btree. Certain core libraries in Chrome build with these warnings [1]; btree_map and btree_set cannot be used in those libraries until these warnings are fixed. [1] https://crbug.com/1292951 PiperOrigin-RevId: 476908396 Change-Id: I32e9ea1eec911e329d6ff00f04fa2e9cfde8660a --- absl/container/internal/btree.h | 44 ++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'absl/container/internal/btree.h') diff --git a/absl/container/internal/btree.h b/absl/container/internal/btree.h index e559bece..203823b0 100644 --- a/absl/container/internal/btree.h +++ b/absl/container/internal/btree.h @@ -1335,7 +1335,7 @@ class btree { btree(btree &&other) noexcept : root_(absl::exchange(other.root_, EmptyNode())), rightmost_(std::move(other.rightmost_)), - size_(absl::exchange(other.size_, 0)) { + size_(absl::exchange(other.size_, 0u)) { other.mutable_rightmost() = EmptyNode(); } btree(btree &&other, const allocator_type &alloc) @@ -1761,11 +1761,11 @@ inline void btree_node

::remove_values(const field_type i, if (is_internal()) { // Delete all children between begin and end. - for (int j = 0; j < to_erase; ++j) { + for (field_type j = 0; j < to_erase; ++j) { clear_and_delete(child(i + j + 1), alloc); } // Rotate children after end into new positions. - for (int j = i + to_erase + 1; j <= orig_finish; ++j) { + for (field_type j = i + to_erase + 1; j <= orig_finish; ++j) { set_child(j - to_erase, child(j)); clear_child(j); } @@ -1912,7 +1912,8 @@ void btree_node

::merge(btree_node *src, allocator_type *alloc) { if (is_internal()) { // Move the child pointers from the right to the left node. - for (int i = src->start(), j = finish() + 1; i <= src->finish(); ++i, ++j) { + for (field_type i = src->start(), j = finish() + 1; i <= src->finish(); + ++i, ++j) { init_child(j, src->child(i)); src->clear_child(i); } @@ -2301,7 +2302,8 @@ auto btree

::operator=(btree &&other) noexcept -> btree & { template auto btree

::erase(iterator iter) -> iterator { - iter.node_->value_destroy(iter.position_, mutable_allocator()); + iter.node_->value_destroy(static_cast(iter.position_), + mutable_allocator()); iter.update_generation(); const bool internal_delete = iter.node_->is_internal(); @@ -2312,15 +2314,19 @@ auto btree

::erase(iterator iter) -> iterator { iterator internal_iter(iter); --iter; assert(iter.node_->is_leaf()); - internal_iter.node_->transfer(internal_iter.position_, iter.position_, - iter.node_, mutable_allocator()); + internal_iter.node_->transfer( + static_cast(internal_iter.position_), + static_cast(iter.position_), iter.node_, + mutable_allocator()); } else { // Shift values after erased position in leaf. In the internal case, we // don't need to do this because the leaf position is the end of the node. - const field_type transfer_from = iter.position_ + 1; + const field_type transfer_from = + static_cast(iter.position_ + 1); const field_type num_to_transfer = iter.node_->finish() - transfer_from; - iter.node_->transfer_n(num_to_transfer, iter.position_, transfer_from, - iter.node_, mutable_allocator()); + iter.node_->transfer_n(num_to_transfer, + static_cast(iter.position_), + transfer_from, iter.node_, mutable_allocator()); } // Update node finish and container size. iter.node_->set_finish(iter.node_->finish() - 1); @@ -2386,7 +2392,7 @@ auto btree

::rebalance_after_delete(iterator iter) -> iterator { template auto btree

::erase_range(iterator begin, iterator end) -> std::pair { - difference_type count = std::distance(begin, end); + size_type count = static_cast(std::distance(begin, end)); assert(count >= 0); if (count == 0) { @@ -2400,8 +2406,10 @@ auto btree

::erase_range(iterator begin, iterator end) if (begin.node_ == end.node_) { assert(end.position_ > begin.position_); - begin.node_->remove_values(begin.position_, end.position_ - begin.position_, - mutable_allocator()); + begin.node_->remove_values( + static_cast(begin.position_), + static_cast(end.position_ - begin.position_), + mutable_allocator()); size_ -= count; return {count, rebalance_after_delete(begin)}; } @@ -2411,11 +2419,11 @@ auto btree

::erase_range(iterator begin, iterator end) if (begin.node_->is_leaf()) { const size_type remaining_to_erase = size_ - target_size; const size_type remaining_in_node = - begin.node_->finish() - begin.position_; - const size_type to_erase = - (std::min)(remaining_to_erase, remaining_in_node); - begin.node_->remove_values(begin.position_, to_erase, - mutable_allocator()); + static_cast(begin.node_->finish() - begin.position_); + const field_type to_erase = static_cast( + (std::min)(remaining_to_erase, remaining_in_node)); + begin.node_->remove_values(static_cast(begin.position_), + to_erase, mutable_allocator()); size_ -= to_erase; begin = rebalance_after_delete(begin); } else { -- cgit v1.2.3