diff options
Diffstat (limited to 'include/initializer_list')
-rw-r--r-- | include/initializer_list | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/include/initializer_list b/include/initializer_list new file mode 100644 index 0000000..3263906 --- /dev/null +++ b/include/initializer_list @@ -0,0 +1,105 @@ +// -*- C++ -*- +//===----------------------- initializer_list -----------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP_INITIALIZER_LIST +#define _LIBCPP_INITIALIZER_LIST + +/* + initializer_list synopsis + +namespace std +{ + +template<class E> +class initializer_list +{ +public: + typedef E value_type; + typedef const E& reference; + typedef const E& const_reference; + typedef size_t size_type; + + typedef const E* iterator; + typedef const E* const_iterator; + + initializer_list() noexcept; + + size_t size() const noexcept; + const E* begin() const noexcept; + const E* end() const noexcept; +}; + +template<class E> const E* begin(initializer_list<E> il) noexcept; +template<class E> const E* end(initializer_list<E> il) noexcept; + +} // std + +*/ + +#include <__config> +#include <cstddef> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +#pragma GCC system_header +#endif + +namespace std // purposefully not versioned +{ + +#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS + +template<class _E> +class _LIBCPP_VISIBLE initializer_list +{ + const _E* __begin_; + size_t __size_; + + _LIBCPP_ALWAYS_INLINE + initializer_list(const _E* __b, size_t __s) _NOEXCEPT + : __begin_(__b), + __size_(__s) + {} +public: + typedef _E value_type; + typedef const _E& reference; + typedef const _E& const_reference; + typedef size_t size_type; + + typedef const _E* iterator; + typedef const _E* const_iterator; + + _LIBCPP_ALWAYS_INLINE initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} + + _LIBCPP_ALWAYS_INLINE size_t size() const _NOEXCEPT {return __size_;} + _LIBCPP_ALWAYS_INLINE const _E* begin() const _NOEXCEPT {return __begin_;} + _LIBCPP_ALWAYS_INLINE const _E* end() const _NOEXCEPT {return __begin_ + __size_;} +}; + +template<class _E> +inline _LIBCPP_INLINE_VISIBILITY +const _E* +begin(initializer_list<_E> __il) _NOEXCEPT +{ + return __il.begin(); +} + +template<class _E> +inline _LIBCPP_INLINE_VISIBILITY +const _E* +end(initializer_list<_E> __il) _NOEXCEPT +{ + return __il.end(); +} + +#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS + +} // std + +#endif // _LIBCPP_INITIALIZER_LIST |