initializer_list revision 232924
1227825Stheraven// -*- C++ -*-
2227825Stheraven//===----------------------- initializer_list -----------------------------===//
3227825Stheraven//
4227825Stheraven//                     The LLVM Compiler Infrastructure
5227825Stheraven//
6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open
7227825Stheraven// Source Licenses. See LICENSE.TXT for details.
8227825Stheraven//
9227825Stheraven//===----------------------------------------------------------------------===//
10227825Stheraven
11227825Stheraven#ifndef _LIBCPP_INITIALIZER_LIST
12227825Stheraven#define _LIBCPP_INITIALIZER_LIST
13227825Stheraven
14227825Stheraven/*
15227825Stheraven    initializer_list synopsis
16227825Stheraven
17227825Stheravennamespace std
18227825Stheraven{
19227825Stheraven
20227825Stheraventemplate<class E>
21227825Stheravenclass initializer_list
22227825Stheraven{
23227825Stheravenpublic:
24227825Stheraven    typedef E        value_type;
25227825Stheraven    typedef const E& reference;
26227825Stheraven    typedef const E& const_reference;
27227825Stheraven    typedef size_t   size_type;
28227825Stheraven
29227825Stheraven    typedef const E* iterator;
30227825Stheraven    typedef const E* const_iterator;
31227825Stheraven
32227825Stheraven    initializer_list() noexcept;
33227825Stheraven
34227825Stheraven    size_t   size()  const noexcept;
35227825Stheraven    const E* begin() const noexcept;
36227825Stheraven    const E* end()   const noexcept;
37227825Stheraven};
38227825Stheraven
39227825Stheraventemplate<class E> const E* begin(initializer_list<E> il) noexcept;
40227825Stheraventemplate<class E> const E* end(initializer_list<E> il) noexcept;
41227825Stheraven
42227825Stheraven}  // std
43227825Stheraven
44227825Stheraven*/
45227825Stheraven
46227825Stheraven#include <__config>
47227825Stheraven#include <cstddef>
48227825Stheraven
49227825Stheraven#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
50227825Stheraven#pragma GCC system_header
51227825Stheraven#endif
52227825Stheraven
53227825Stheravennamespace std  // purposefully not versioned
54227825Stheraven{
55227825Stheraven
56227825Stheraven#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
57227825Stheraven
58232924Stheraventemplate<class _Ep>
59227825Stheravenclass _LIBCPP_VISIBLE initializer_list
60227825Stheraven{
61232924Stheraven    const _Ep* __begin_;
62227825Stheraven    size_t    __size_;
63227825Stheraven
64227825Stheraven    _LIBCPP_ALWAYS_INLINE
65232924Stheraven    initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT
66227825Stheraven        : __begin_(__b),
67227825Stheraven          __size_(__s)
68227825Stheraven        {}
69227825Stheravenpublic:
70232924Stheraven    typedef _Ep        value_type;
71232924Stheraven    typedef const _Ep& reference;
72232924Stheraven    typedef const _Ep& const_reference;
73227825Stheraven    typedef size_t    size_type;
74227825Stheraven
75232924Stheraven    typedef const _Ep* iterator;
76232924Stheraven    typedef const _Ep* const_iterator;
77227825Stheraven
78227825Stheraven    _LIBCPP_ALWAYS_INLINE initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {}
79227825Stheraven
80227825Stheraven    _LIBCPP_ALWAYS_INLINE size_t    size()  const _NOEXCEPT {return __size_;}
81232924Stheraven    _LIBCPP_ALWAYS_INLINE const _Ep* begin() const _NOEXCEPT {return __begin_;}
82232924Stheraven    _LIBCPP_ALWAYS_INLINE const _Ep* end()   const _NOEXCEPT {return __begin_ + __size_;}
83227825Stheraven};
84227825Stheraven
85232924Stheraventemplate<class _Ep>
86227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
87232924Stheravenconst _Ep*
88232924Stheravenbegin(initializer_list<_Ep> __il) _NOEXCEPT
89227825Stheraven{
90227825Stheraven    return __il.begin();
91227825Stheraven}
92227825Stheraven
93232924Stheraventemplate<class _Ep>
94227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
95232924Stheravenconst _Ep*
96232924Stheravenend(initializer_list<_Ep> __il) _NOEXCEPT
97227825Stheraven{
98227825Stheraven    return __il.end();
99227825Stheraven}
100227825Stheraven
101227825Stheraven#endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
102227825Stheraven
103227825Stheraven}  // std
104227825Stheraven
105227825Stheraven#endif  // _LIBCPP_INITIALIZER_LIST
106