Line data Source code
1 : // std::initializer_list support -*- C++ -*- 2 : 3 : // Copyright (C) 2008-2019 Free Software Foundation, Inc. 4 : // 5 : // This file is part of GCC. 6 : // 7 : // GCC is free software; you can redistribute it and/or modify 8 : // it under the terms of the GNU General Public License as published by 9 : // the Free Software Foundation; either version 3, or (at your option) 10 : // any later version. 11 : // 12 : // GCC is distributed in the hope that it will be useful, 13 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : // GNU General Public License for more details. 16 : // 17 : // Under Section 7 of GPL version 3, you are granted additional 18 : // permissions described in the GCC Runtime Library Exception, version 19 : // 3.1, as published by the Free Software Foundation. 20 : 21 : // You should have received a copy of the GNU General Public License and 22 : // a copy of the GCC Runtime Library Exception along with this program; 23 : // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 : // <http://www.gnu.org/licenses/>. 25 : 26 : /** @file initializer_list 27 : * This is a Standard C++ Library header. 28 : */ 29 : 30 : #ifndef _INITIALIZER_LIST 31 : #define _INITIALIZER_LIST 32 : 33 : #pragma GCC system_header 34 : 35 : #if __cplusplus < 201103L 36 : # include <bits/c++0x_warning.h> 37 : #else // C++0x 38 : 39 : #pragma GCC visibility push(default) 40 : 41 : #include <bits/c++config.h> 42 : 43 : namespace std 44 : { 45 : /// initializer_list 46 : template<class _E> 47 : class initializer_list 48 : { 49 : public: 50 : typedef _E value_type; 51 : typedef const _E& reference; 52 : typedef const _E& const_reference; 53 : typedef size_t size_type; 54 : typedef const _E* iterator; 55 : typedef const _E* const_iterator; 56 : 57 : private: 58 : iterator _M_array; 59 : size_type _M_len; 60 : 61 : // The compiler can call a private constructor. 62 : constexpr initializer_list(const_iterator __a, size_type __l) 63 : : _M_array(__a), _M_len(__l) { } 64 : 65 : public: 66 : constexpr initializer_list() noexcept 67 : : _M_array(0), _M_len(0) { } 68 : 69 : // Number of elements. 70 : constexpr size_type 71 4628 : size() const noexcept { return _M_len; } 72 : 73 : // First element. 74 : constexpr const_iterator 75 4628 : begin() const noexcept { return _M_array; } 76 : 77 : // One past the last element. 78 : constexpr const_iterator 79 4628 : end() const noexcept { return begin() + size(); } 80 : }; 81 : 82 : /** 83 : * @brief Return an iterator pointing to the first element of 84 : * the initializer_list. 85 : * @param __ils Initializer list. 86 : */ 87 : template<class _Tp> 88 : constexpr const _Tp* 89 : begin(initializer_list<_Tp> __ils) noexcept 90 : { return __ils.begin(); } 91 : 92 : /** 93 : * @brief Return an iterator pointing to one past the last element 94 : * of the initializer_list. 95 : * @param __ils Initializer list. 96 : */ 97 : template<class _Tp> 98 : constexpr const _Tp* 99 : end(initializer_list<_Tp> __ils) noexcept 100 : { return __ils.end(); } 101 : } 102 : 103 : #pragma GCC visibility pop 104 : 105 : #endif // C++11 106 : 107 : #endif // _INITIALIZER_LIST