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