Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // std::initializer_list support -*- C++ -*-
  2.  
  3. // Copyright (C) 2008-2015 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.       size() const noexcept { return _M_len; }
  72.  
  73.       // First element.
  74.       constexpr const_iterator
  75.       begin() const noexcept { return _M_array; }
  76.  
  77.       // One past the last element.
  78.       constexpr const_iterator
  79.       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
  108.