Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: webrtc/base/array_view.h

Issue 2089183002: Don't recreate the speech encoder if we don't have to (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 // } 49 // }
50 // return false; 50 // return false;
51 // } 51 // }
52 // 52 //
53 // And even better, because a bunch of things will implicitly convert to 53 // And even better, because a bunch of things will implicitly convert to
54 // ArrayView, we can call it like this: 54 // ArrayView, we can call it like this:
55 // 55 //
56 // Contains17(arr); // C array 56 // Contains17(arr); // C array
57 // Contains17(arr); // std::vector 57 // Contains17(arr); // std::vector
58 // Contains17(rtc::ArrayView<int>(arr, size)); // pointer + size 58 // Contains17(rtc::ArrayView<int>(arr, size)); // pointer + size
59 // Contains17(nullptr); // nullptr -> empty ArrayView
59 // ... 60 // ...
60 // 61 //
61 // One important point is that ArrayView<T> and ArrayView<const T> are 62 // One important point is that ArrayView<T> and ArrayView<const T> are
62 // different types, which allow and don't allow mutation of the array elements, 63 // different types, which allow and don't allow mutation of the array elements,
63 // respectively. The implicit conversions work just like you'd hope, so that 64 // respectively. The implicit conversions work just like you'd hope, so that
64 // e.g. vector<int> will convert to either ArrayView<int> or ArrayView<const 65 // e.g. vector<int> will convert to either ArrayView<int> or ArrayView<const
65 // int>, but const vector<int> will convert only to ArrayView<const int>. 66 // int>, but const vector<int> will convert only to ArrayView<const int>.
66 // (ArrayView itself can be the source type in such conversions, so 67 // (ArrayView itself can be the source type in such conversions, so
67 // ArrayView<int> will convert to ArrayView<const int>.) 68 // ArrayView<int> will convert to ArrayView<const int>.)
68 // 69 //
69 // Note: ArrayView is tiny (just a pointer and a count) and trivially copyable, 70 // Note: ArrayView is tiny (just a pointer and a count) and trivially copyable,
70 // so it's probably cheaper to pass it by value than by const reference. 71 // so it's probably cheaper to pass it by value than by const reference.
71 template <typename T> 72 template <typename T>
72 class ArrayView final { 73 class ArrayView final {
73 public: 74 public:
74 // Construct an empty ArrayView. 75 // Construct an empty ArrayView.
75 ArrayView() : ArrayView(static_cast<T*>(nullptr), 0) {} 76 ArrayView() : ArrayView(static_cast<T*>(nullptr), 0) {}
77 ArrayView(std::nullptr_t) : ArrayView() {}
76 78
77 // Construct an ArrayView for a (pointer,size) pair. 79 // Construct an ArrayView for a (pointer,size) pair.
78 template <typename U> 80 template <typename U>
79 ArrayView(U* data, size_t size) 81 ArrayView(U* data, size_t size)
80 : data_(size == 0 ? nullptr : data), size_(size) { 82 : data_(size == 0 ? nullptr : data), size_(size) {
81 CheckInvariant(); 83 CheckInvariant();
82 } 84 }
83 85
84 // Construct an ArrayView for an array. 86 // Construct an ArrayView for an array.
85 template <typename U, size_t N> 87 template <typename U, size_t N>
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 private: 126 private:
125 // Invariant: !data_ iff size_ == 0. 127 // Invariant: !data_ iff size_ == 0.
126 void CheckInvariant() const { RTC_DCHECK_EQ(!data_, size_ == 0); } 128 void CheckInvariant() const { RTC_DCHECK_EQ(!data_, size_ == 0); }
127 T* data_; 129 T* data_;
128 size_t size_; 130 size_t size_;
129 }; 131 };
130 132
131 } // namespace rtc 133 } // namespace rtc
132 134
133 #endif // WEBRTC_BASE_ARRAY_VIEW_H_ 135 #endif // WEBRTC_BASE_ARRAY_VIEW_H_
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/audio_coding/acm2/codec_manager.h » ('j') | webrtc/modules/audio_coding/acm2/codec_manager.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698