/* Initializer list support for OctaSTD. * * This file is part of OctaSTD. See COPYING.md for futher information. */ #ifndef OSTD_INITIALIZER_LIST_HH #define OSTD_INITIALIZER_LIST_HH #include #include "ostd/range.hh" #ifndef OSTD_ALLOW_CXXSTD /* must be in std namespace otherwise the compiler won't know about it */ namespace std { template class initializer_list { const T *p_buf; ostd::Size p_len; constexpr initializer_list(const T *v, ostd::Size n): p_buf(v), p_len(n) {} public: constexpr initializer_list(): p_buf(nullptr), p_len(0) {} constexpr ostd::Size size() const { return p_len; } constexpr const T *begin() const { return p_buf; } constexpr const T *end() const { return p_buf + p_len; } }; } #else #include #endif namespace ostd { template using InitializerList = std::initializer_list; template PointerRange iter(std::initializer_list init) { return PointerRange(init.begin(), init.end()); } template PointerRange citer(std::initializer_list init) { return PointerRange(init.begin(), init.end()); } } #endif