Branch data 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 : 42 : size() const noexcept { return _M_len; } 72 : : 73 : : // First element. 74 : : constexpr const_iterator 75 : 84 : begin() const noexcept { return _M_array; } 76 : : 77 : : // One past the last element. 78 : : constexpr const_iterator 79 : 42 : 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