diff options
Diffstat (limited to 'tests/libcxx/include/initializer_list')
-rw-r--r-- | tests/libcxx/include/initializer_list | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/libcxx/include/initializer_list b/tests/libcxx/include/initializer_list new file mode 100644 index 00000000..83eb8f48 --- /dev/null +++ b/tests/libcxx/include/initializer_list @@ -0,0 +1,99 @@ +// -*- 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(); + + size_t size() const; + const E* begin() const; + const E* end() const; +}; + +template<class E> const E* begin(initializer_list<E> il); +template<class E> const E* end(initializer_list<E> il); + +} // std + +*/ + +#include <__config> +#include <cstddef> + +#pragma GCC system_header + +namespace std // purposefully not versioned +{ + +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) + : __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() : __begin_(nullptr), __size_(0) {} + + _LIBCPP_ALWAYS_INLINE size_t size() const {return __size_;} + _LIBCPP_ALWAYS_INLINE const _E* begin() const {return __begin_;} + _LIBCPP_ALWAYS_INLINE const _E* end() const {return __begin_ + __size_;} +}; + +template<class _E> +inline _LIBCPP_INLINE_VISIBILITY +const _E* +begin(initializer_list<_E> __il) +{ + return __il.begin(); +} + +template<class _E> +inline _LIBCPP_INLINE_VISIBILITY +const _E* +end(initializer_list<_E> __il) +{ + return __il.end(); +} + +} // std + +#endif // _LIBCPP_INITIALIZER_LIST |