aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include/Span.h
diff options
context:
space:
mode:
authoratkawa7 <atkawa7@yahoo.com>2017-06-13 17:12:54 -0700
committeratkawa7 <atkawa7@yahoo.com>2017-06-13 17:12:54 -0700
commitaa83671a723da212e640990ef9b9efafccba8af1 (patch)
treef50d482f3d2b4e3545a672eb58712ac553d272de /toolsrc/include/Span.h
parent9a409006cf7ec63bebe0d9341799b5cb529155ae (diff)
parent548ff8d3db47e83ebecc5b57dcbd63723cee7546 (diff)
downloadvcpkg-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.h38
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;
+};