/* Initializer list support for OctaSTD. * * This file is part of OctaSTD. See COPYING.md for futher information. */ #ifndef OCTA_INITIALIZER_LIST_H #define OCTA_INITIALIZER_LIST_H #include #include "octa/range.h" #ifndef OCTA_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; size_t p_len; initializer_list(const _T *v, size_t n): p_buf(v), p_len(n) {} public: initializer_list(): p_buf(nullptr), p_len(0) {} size_t size() const { return p_len; } const _T *begin() const { return p_buf; } const _T *end() const { return p_buf + p_len; } }; } #else #include #endif namespace octa { template using InitializerList = std::initializer_list<_T>; template octa::PointerRange each(std::initializer_list<_T> init) { return octa::PointerRange(init.begin(), init.end()); } } #endif