Introduce ArrayView::subview function
to return portion of the original view BUG=None Review-Url: https://codereview.webrtc.org/2502383004 Cr-Commit-Position: refs/heads/master@{#15149}
This commit is contained in:
parent
509e4fe8e6
commit
a28780e994
@ -120,6 +120,13 @@ class ArrayView final {
|
||||
const T* cbegin() const { return data_; }
|
||||
const T* cend() const { return data_ + size_; }
|
||||
|
||||
ArrayView subview(size_t offset, size_t size) const {
|
||||
if (offset >= size_)
|
||||
return ArrayView();
|
||||
return ArrayView(data_ + offset, std::min(size, size_ - offset));
|
||||
}
|
||||
ArrayView subview(size_t offset) const { return subview(offset, size_); }
|
||||
|
||||
// Comparing two ArrayViews compares their (pointer,size) pairs; it does
|
||||
// *not* dereference the pointers.
|
||||
friend bool operator==(const ArrayView& a, const ArrayView& b) {
|
||||
|
||||
@ -16,11 +16,15 @@
|
||||
#include "webrtc/base/buffer.h"
|
||||
#include "webrtc/base/checks.h"
|
||||
#include "webrtc/base/gunit.h"
|
||||
#include "webrtc/test/gmock.h"
|
||||
|
||||
namespace rtc {
|
||||
|
||||
namespace {
|
||||
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::IsEmpty;
|
||||
|
||||
template <typename T>
|
||||
void Call(ArrayView<T>) {}
|
||||
|
||||
@ -232,4 +236,21 @@ TEST(ArrayViewTest, TestCompare) {
|
||||
EXPECT_NE(ArrayView<int>(a), ArrayView<int>(a, 2));
|
||||
}
|
||||
|
||||
TEST(ArrayViewTest, TestSubView) {
|
||||
int a[] = {1, 2, 3};
|
||||
ArrayView<int> av(a);
|
||||
|
||||
EXPECT_EQ(av.subview(0), av);
|
||||
|
||||
EXPECT_THAT(av.subview(1), ElementsAre(2, 3));
|
||||
EXPECT_THAT(av.subview(2), ElementsAre(3));
|
||||
EXPECT_THAT(av.subview(3), IsEmpty());
|
||||
EXPECT_THAT(av.subview(4), IsEmpty());
|
||||
|
||||
EXPECT_THAT(av.subview(1, 0), IsEmpty());
|
||||
EXPECT_THAT(av.subview(1, 1), ElementsAre(2));
|
||||
EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3));
|
||||
EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3));
|
||||
}
|
||||
|
||||
} // namespace rtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user