Skip to content

Commit 6b8094c

Browse files
author
Przemo
committed
Adding begin,end,size propagation for containers which support it
1 parent 6226f7b commit 6b8094c

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

inc/owned_pointer.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,21 @@ class owned_pointer : std::shared_ptr<_priv::control_block_type>
156156
auto operator->() const -> element_type*;
157157
auto get(std::nothrow_t) const noexcept -> element_type*;
158158

159+
template<typename X = element_type>
160+
auto begin() const -> decltype(std::declval<X>().begin()) { return get()->begin(); }
161+
162+
template<typename X = element_type>
163+
auto end() const -> decltype(std::declval<X>().end()) { return get()->end(); }
164+
165+
template<typename X = element_type>
166+
auto cbegin() const -> decltype(std::declval<X>().cbegin()) { return get()->cbegin(); }
167+
168+
template<typename X = element_type>
169+
auto cend() const -> decltype(std::declval<X>().cend()) { return get()->end(); }
170+
171+
template<typename X = element_type>
172+
auto size() const -> decltype(std::declval<X>().size()) { return get()->size(); }
173+
159174
template<typename T>
160175
operator owned_pointer<T>() const noexcept;
161176

ut/owned_pointer_ut.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
**/
24+
#include <gmock/gmock-generated-matchers.h>
25+
#include <gmock/gmock-matchers.h>
2426
#include <gtest/gtest.h>
2527
#include <gmock/gmock.h>
2628

@@ -560,3 +562,25 @@ TEST_F(owned_pointer_ut, testCastingAddressMovement)
560562
take.giveme(*u);
561563
}
562564
}
565+
566+
TEST_F(owned_pointer_ut, testBeginEndAndSizePropagation)
567+
{
568+
std::vector<int> v{};
569+
const auto o = csp::make_owned<std::vector<int>>(1, 2, 3, 4, 5);
570+
571+
std::copy(o.begin(), o.end(), std::back_inserter(v));
572+
573+
ASSERT_THAT(o.size(), ::testing::Eq(5));
574+
ASSERT_THAT(v, ::testing::ElementsAre(1,2,3,4,5));
575+
}
576+
577+
TEST_F(owned_pointer_ut, testCBeginEndAndSizePropagation)
578+
{
579+
std::vector<int> v{};
580+
const auto o = csp::make_owned<std::vector<int>>(1, 2, 3, 4, 5);
581+
582+
std::copy(o.cbegin(), o.cend(), std::back_inserter(v));
583+
584+
ASSERT_THAT(o.size(), ::testing::Eq(5));
585+
ASSERT_THAT(v, ::testing::ElementsAre(1,2,3,4,5));
586+
}

0 commit comments

Comments
 (0)