diff options
| author | atkawa7 <atkawa7@yahoo.com> | 2017-06-13 17:12:54 -0700 |
|---|---|---|
| committer | atkawa7 <atkawa7@yahoo.com> | 2017-06-13 17:12:54 -0700 |
| commit | aa83671a723da212e640990ef9b9efafccba8af1 (patch) | |
| tree | f50d482f3d2b4e3545a672eb58712ac553d272de /toolsrc/include/Span.h | |
| parent | 9a409006cf7ec63bebe0d9341799b5cb529155ae (diff) | |
| parent | 548ff8d3db47e83ebecc5b57dcbd63723cee7546 (diff) | |
| download | vcpkg-aa83671a723da212e640990ef9b9efafccba8af1.tar.gz vcpkg-aa83671a723da212e640990ef9b9efafccba8af1.zip | |
Merge https://github.com/Microsoft/vcpkg into live555
Diffstat (limited to 'toolsrc/include/Span.h')
| -rw-r--r-- | toolsrc/include/Span.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/toolsrc/include/Span.h b/toolsrc/include/Span.h new file mode 100644 index 000000000..b16af2cef --- /dev/null +++ b/toolsrc/include/Span.h @@ -0,0 +1,38 @@ +#pragma once
+
+#include <array>
+#include <cstddef>
+#include <vector>
+
+template<class T>
+struct span
+{
+public:
+ using element_type = T;
+ using pointer = T*;
+ using reference = T&;
+ using iterator = T*;
+
+ constexpr span() noexcept : m_ptr(nullptr), m_count(0) {}
+ constexpr span(std::nullptr_t) noexcept : span() {}
+ constexpr span(T* ptr, size_t count) noexcept : m_ptr(ptr), m_count(count) {}
+ constexpr span(T* ptr_begin, T* ptr_end) noexcept : m_ptr(ptr_begin), m_count(ptr_end - ptr_begin) {}
+
+ template<size_t N>
+ constexpr span(T (&arr)[N]) noexcept : span(arr, N)
+ {
+ }
+
+ span(std::vector<T>& v) noexcept : span(v.data(), v.size()) {}
+ span(const std::vector<std::remove_const_t<T>>& v) noexcept : span(v.data(), v.size()) {}
+
+ constexpr iterator begin() const { return m_ptr; }
+ constexpr iterator end() const { return m_ptr + m_count; }
+
+ constexpr reference operator[](size_t i) const { return m_ptr[i]; }
+ constexpr size_t size() const { return m_count; }
+
+private:
+ pointer m_ptr;
+ size_t m_count;
+};
|
