1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_MEMORY_RAW_SPAN_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_MEMORY_RAW_SPAN_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h" 9*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker namespace base { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker // raw_span<T> is a type that provides the spatial safety of span<T> along 14*6777b538SAndroid Build Coastguard Worker // with the temporal safety of raw_ptr<T>. This is intended to be a safer 15*6777b538SAndroid Build Coastguard Worker // replacement for classes that store pointer + size fields. As is the case 16*6777b538SAndroid Build Coastguard Worker // with raw_ptr<>, raw_span<> should be used for class members only, with 17*6777b538SAndroid Build Coastguard Worker // ordinary span<> used for function arguments and the like. Note that 18*6777b538SAndroid Build Coastguard Worker // raw_span<> will implicitly convert to span<> for ease of use in these 19*6777b538SAndroid Build Coastguard Worker // cases. 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker template <typename T, RawPtrTraits Traits = RawPtrTraits::kEmpty> 22*6777b538SAndroid Build Coastguard Worker using raw_span = 23*6777b538SAndroid Build Coastguard Worker span<T, dynamic_extent, raw_ptr<T, Traits | AllowPtrArithmetic>>; 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker template <typename T> ExtractAsDanglingSpan(raw_span<T> & arg)26*6777b538SAndroid Build Coastguard Workerspan<T> ExtractAsDanglingSpan(raw_span<T>& arg) { 27*6777b538SAndroid Build Coastguard Worker span<T> result = std::exchange(arg, raw_span<T>()); 28*6777b538SAndroid Build Coastguard Worker return result; 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker } // namespace base 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker #endif // BASE_MEMORY_RAW_SPAN_H_ 34