// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef INCLUDE_V8_MEMORY_SPAN_H_ #define INCLUDE_V8_MEMORY_SPAN_H_ #include #include "v8config.h" // NOLINT(build/include_directory) namespace v8 { /** * Points to an unowned continous buffer holding a known number of elements. * * This is similar to std::span (under consideration for C++20), but does not * require advanced C++ support. In the (far) future, this may be replaced with * or aliased to std::span. * * To facilitate future migration, this class exposes a subset of the interface * implemented by std::span. */ template class V8_EXPORT MemorySpan { public: /** The default constructor creates an empty span. */ constexpr MemorySpan() = default; constexpr MemorySpan(T* data, size_t size) : data_(data), size_(size) {} /** Returns a pointer to the beginning of the buffer. */ constexpr T* data() const { return data_; } /** Returns the number of elements that the buffer holds. */ constexpr size_t size() const { return size_; } private: T* data_ = nullptr; size_t size_ = 0; }; } // namespace v8 #endif // INCLUDE_V8_MEMORY_SPAN_H_