13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===----------------------- initializer_list -----------------------------===// 33e519524SHoward Hinnant// 45b08a8a4SHoward Hinnant// The LLVM Compiler Infrastructure 53e519524SHoward Hinnant// 6*412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 7*412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 83e519524SHoward Hinnant// 93e519524SHoward Hinnant//===----------------------------------------------------------------------===// 103e519524SHoward Hinnant 113e519524SHoward Hinnant#ifndef _LIBCPP_INITIALIZER_LIST 123e519524SHoward Hinnant#define _LIBCPP_INITIALIZER_LIST 133e519524SHoward Hinnant 143e519524SHoward Hinnant/* 153e519524SHoward Hinnant initializer_list synopsis 163e519524SHoward Hinnant 173e519524SHoward Hinnantnamespace std 183e519524SHoward Hinnant{ 193e519524SHoward Hinnant 203e519524SHoward Hinnanttemplate<class E> 213e519524SHoward Hinnantclass initializer_list 223e519524SHoward Hinnant{ 233e519524SHoward Hinnantpublic: 243e519524SHoward Hinnant typedef E value_type; 253e519524SHoward Hinnant typedef const E& reference; 263e519524SHoward Hinnant typedef const E& const_reference; 273e519524SHoward Hinnant typedef size_t size_type; 283e519524SHoward Hinnant 293e519524SHoward Hinnant typedef const E* iterator; 303e519524SHoward Hinnant typedef const E* const_iterator; 313e519524SHoward Hinnant 323e519524SHoward Hinnant initializer_list(); 333e519524SHoward Hinnant 343e519524SHoward Hinnant size_t size() const; 353e519524SHoward Hinnant const E* begin() const; 363e519524SHoward Hinnant const E* end() const; 373e519524SHoward Hinnant}; 383e519524SHoward Hinnant 399d4a2861SHoward Hinnanttemplate<class E> const E* begin(initializer_list<E> il); 409d4a2861SHoward Hinnanttemplate<class E> const E* end(initializer_list<E> il); 419d4a2861SHoward Hinnant 423e519524SHoward Hinnant} // std 433e519524SHoward Hinnant 443e519524SHoward Hinnant*/ 453e519524SHoward Hinnant 463e519524SHoward Hinnant#include <__config> 473e519524SHoward Hinnant#include <cstddef> 483e519524SHoward Hinnant 493e519524SHoward Hinnant#pragma GCC system_header 503e519524SHoward Hinnant 513e519524SHoward Hinnantnamespace std // purposefully not versioned 523e519524SHoward Hinnant{ 533e519524SHoward Hinnant 543e519524SHoward Hinnanttemplate<class _E> 553030b2f1SHoward Hinnantclass _LIBCPP_VISIBLE initializer_list 563e519524SHoward Hinnant{ 573e519524SHoward Hinnant const _E* __begin_; 583e519524SHoward Hinnant size_t __size_; 593e519524SHoward Hinnant 603e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE 613e519524SHoward Hinnant initializer_list(const _E* __b, size_t __s) 623e519524SHoward Hinnant : __begin_(__b), 633e519524SHoward Hinnant __size_(__s) 643e519524SHoward Hinnant {} 653e519524SHoward Hinnantpublic: 663e519524SHoward Hinnant typedef _E value_type; 673e519524SHoward Hinnant typedef const _E& reference; 683e519524SHoward Hinnant typedef const _E& const_reference; 693e519524SHoward Hinnant typedef size_t size_type; 703e519524SHoward Hinnant 713e519524SHoward Hinnant typedef const _E* iterator; 723e519524SHoward Hinnant typedef const _E* const_iterator; 733e519524SHoward Hinnant 743e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE initializer_list() : __begin_(nullptr), __size_(0) {} 753e519524SHoward Hinnant 763e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE size_t size() const {return __size_;} 773e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE const _E* begin() const {return __begin_;} 783e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE const _E* end() const {return __begin_ + __size_;} 793e519524SHoward Hinnant}; 803e519524SHoward Hinnant 819d4a2861SHoward Hinnanttemplate<class _E> 829d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 839d4a2861SHoward Hinnantconst _E* 849d4a2861SHoward Hinnantbegin(initializer_list<_E> __il) 859d4a2861SHoward Hinnant{ 869d4a2861SHoward Hinnant return __il.begin(); 879d4a2861SHoward Hinnant} 889d4a2861SHoward Hinnant 899d4a2861SHoward Hinnanttemplate<class _E> 909d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 919d4a2861SHoward Hinnantconst _E* 929d4a2861SHoward Hinnantend(initializer_list<_E> __il) 939d4a2861SHoward Hinnant{ 949d4a2861SHoward Hinnant return __il.end(); 959d4a2861SHoward Hinnant} 969d4a2861SHoward Hinnant 973e519524SHoward Hinnant} // std 983e519524SHoward Hinnant 993e519524SHoward Hinnant#endif // _LIBCPP_INITIALIZER_LIST 100