summaryrefslogtreecommitdiff
path: root/zen/legacy_compiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'zen/legacy_compiler.h')
-rwxr-xr-xzen/legacy_compiler.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/zen/legacy_compiler.h b/zen/legacy_compiler.h
index 16d87c53..bebf5a05 100755
--- a/zen/legacy_compiler.h
+++ b/zen/legacy_compiler.h
@@ -7,11 +7,47 @@
#ifndef LEGACY_COMPILER_H_839567308565656789
#define LEGACY_COMPILER_H_839567308565656789
+//#include <span> //requires C++20
+
+
namespace std
{
//https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html
//https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
+
+
+//requires C++20! until then, this should suffice...
+template <class T>
+class span
+{
+public:
+ template <class Iterator>
+ span(Iterator first, Iterator last) : size_(last - first), data_(first != last ? &*first : nullptr) {}
+
+ template <class Container>
+ span(Container& cont) : span(cont.begin(), cont.end()) {}
+
+ using iterator = T*;
+ using const_iterator = const T*;
+
+ iterator begin() { return data_; }
+ iterator end () { return data_ + size_; }
+
+ const_iterator begin() const { return data_; }
+ const_iterator end () const { return data_ + size_; }
+
+ const_iterator cbegin() const { return begin(); }
+ const_iterator cend () const { return end (); }
+
+ T* data() const { return data_; }
+ size_t size() const { return size_; }
+ bool empty() const { return size_ == 0; }
+
+private:
+ const size_t size_;
+ T* const data_;
+};
}
#endif //LEGACY_COMPILER_H_839567308565656789
bgstack15