initializer_list revision 227983
1212793Sdim// -*- C++ -*- 2212793Sdim//===----------------------- initializer_list -----------------------------===// 3212793Sdim// 4212793Sdim// The LLVM Compiler Infrastructure 5212793Sdim// 6212793Sdim// This file is dual licensed under the MIT and the University of Illinois Open 7212793Sdim// Source Licenses. See LICENSE.TXT for details. 8212793Sdim// 9212793Sdim//===----------------------------------------------------------------------===// 10212793Sdim 11212793Sdim#ifndef _LIBCPP_INITIALIZER_LIST 12218893Sdim#define _LIBCPP_INITIALIZER_LIST 13212793Sdim 14212793Sdim/* 15212793Sdim initializer_list synopsis 16212793Sdim 17212793Sdimnamespace std 18212793Sdim{ 19212793Sdim 20212793Sdimtemplate<class E> 21212793Sdimclass initializer_list 22212793Sdim{ 23212793Sdimpublic: 24212793Sdim typedef E value_type; 25212793Sdim typedef const E& reference; 26212793Sdim typedef const E& const_reference; 27212793Sdim typedef size_t size_type; 28212793Sdim 29212793Sdim typedef const E* iterator; 30212793Sdim typedef const E* const_iterator; 31212793Sdim 32212793Sdim initializer_list() noexcept; 33212793Sdim 34212793Sdim size_t size() const noexcept; 35212793Sdim const E* begin() const noexcept; 36212793Sdim const E* end() const noexcept; 37218893Sdim}; 38212793Sdim 39212793Sdimtemplate<class E> const E* begin(initializer_list<E> il) noexcept; 40212793Sdimtemplate<class E> const E* end(initializer_list<E> il) noexcept; 41212793Sdim 42212793Sdim} // std 43212793Sdim 44212793Sdim*/ 45212793Sdim 46212793Sdim#include <__config> 47212793Sdim#include <cstddef> 48212793Sdim 49212793Sdim#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 50212793Sdim#pragma GCC system_header 51212793Sdim#endif 52212793Sdim 53212793Sdimnamespace std // purposefully not versioned 54212793Sdim{ 55212793Sdim 56212793Sdim#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 57212793Sdim 58212793Sdimtemplate<class _E> 59212793Sdimclass _LIBCPP_VISIBLE initializer_list 60212793Sdim{ 61212793Sdim const _E* __begin_; 62212793Sdim size_t __size_; 63212793Sdim 64212793Sdim _LIBCPP_ALWAYS_INLINE 65212793Sdim initializer_list(const _E* __b, size_t __s) _NOEXCEPT 66212793Sdim : __begin_(__b), 67212793Sdim __size_(__s) 68212793Sdim {} 69212793Sdimpublic: 70212793Sdim typedef _E value_type; 71212793Sdim typedef const _E& reference; 72212793Sdim typedef const _E& const_reference; 73212793Sdim typedef size_t size_type; 74212793Sdim 75212793Sdim typedef const _E* iterator; 76212793Sdim typedef const _E* const_iterator; 77212793Sdim 78212793Sdim _LIBCPP_ALWAYS_INLINE initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} 79212793Sdim 80234353Sdim _LIBCPP_ALWAYS_INLINE size_t size() const _NOEXCEPT {return __size_;} 81234353Sdim _LIBCPP_ALWAYS_INLINE const _E* begin() const _NOEXCEPT {return __begin_;} 82234353Sdim _LIBCPP_ALWAYS_INLINE const _E* end() const _NOEXCEPT {return __begin_ + __size_;} 83212793Sdim}; 84212793Sdim 85212793Sdimtemplate<class _E> 86212793Sdiminline _LIBCPP_INLINE_VISIBILITY 87212793Sdimconst _E* 88212793Sdimbegin(initializer_list<_E> __il) _NOEXCEPT 89212793Sdim{ 90212793Sdim return __il.begin(); 91212793Sdim} 92212793Sdim 93212793Sdimtemplate<class _E> 94212793Sdiminline _LIBCPP_INLINE_VISIBILITY 95212793Sdimconst _E* 96212793Sdimend(initializer_list<_E> __il) _NOEXCEPT 97212793Sdim{ 98212793Sdim return __il.end(); 99212793Sdim} 100212793Sdim 101212793Sdim#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 102212793Sdim 103212793Sdim} // std 104212793Sdim 105212793Sdim#endif // _LIBCPP_INITIALIZER_LIST 106212793Sdim