13e519524SHoward Hinnant// -*- C++ -*-
23e519524SHoward Hinnant//===----------------------- initializer_list -----------------------------===//
33e519524SHoward Hinnant//
45b08a8a4SHoward Hinnant//                     The LLVM Compiler Infrastructure
53e519524SHoward Hinnant//
6*412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
7*412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
83e519524SHoward Hinnant//
93e519524SHoward Hinnant//===----------------------------------------------------------------------===//
103e519524SHoward Hinnant
113e519524SHoward Hinnant#ifndef _LIBCPP_INITIALIZER_LIST
123e519524SHoward Hinnant#define _LIBCPP_INITIALIZER_LIST
133e519524SHoward Hinnant
143e519524SHoward Hinnant/*
153e519524SHoward Hinnant    initializer_list synopsis
163e519524SHoward Hinnant
173e519524SHoward Hinnantnamespace std
183e519524SHoward Hinnant{
193e519524SHoward Hinnant
203e519524SHoward Hinnanttemplate<class E>
213e519524SHoward Hinnantclass initializer_list
223e519524SHoward Hinnant{
233e519524SHoward Hinnantpublic:
243e519524SHoward Hinnant    typedef E        value_type;
253e519524SHoward Hinnant    typedef const E& reference;
263e519524SHoward Hinnant    typedef const E& const_reference;
273e519524SHoward Hinnant    typedef size_t   size_type;
283e519524SHoward Hinnant
293e519524SHoward Hinnant    typedef const E* iterator;
303e519524SHoward Hinnant    typedef const E* const_iterator;
313e519524SHoward Hinnant
323e519524SHoward Hinnant    initializer_list();
333e519524SHoward Hinnant
343e519524SHoward Hinnant    size_t   size()  const;
353e519524SHoward Hinnant    const E* begin() const;
363e519524SHoward Hinnant    const E* end()   const;
373e519524SHoward Hinnant};
383e519524SHoward Hinnant
399d4a2861SHoward Hinnanttemplate<class E> const E* begin(initializer_list<E> il);
409d4a2861SHoward Hinnanttemplate<class E> const E* end(initializer_list<E> il);
419d4a2861SHoward Hinnant
423e519524SHoward Hinnant}  // std
433e519524SHoward Hinnant
443e519524SHoward Hinnant*/
453e519524SHoward Hinnant
463e519524SHoward Hinnant#include <__config>
473e519524SHoward Hinnant#include <cstddef>
483e519524SHoward Hinnant
493e519524SHoward Hinnant#pragma GCC system_header
503e519524SHoward Hinnant
513e519524SHoward Hinnantnamespace std  // purposefully not versioned
523e519524SHoward Hinnant{
533e519524SHoward Hinnant
543e519524SHoward Hinnanttemplate<class _E>
553030b2f1SHoward Hinnantclass _LIBCPP_VISIBLE initializer_list
563e519524SHoward Hinnant{
573e519524SHoward Hinnant    const _E* __begin_;
583e519524SHoward Hinnant    size_t    __size_;
593e519524SHoward Hinnant
603e519524SHoward Hinnant    _LIBCPP_ALWAYS_INLINE
613e519524SHoward Hinnant    initializer_list(const _E* __b, size_t __s)
623e519524SHoward Hinnant        : __begin_(__b),
633e519524SHoward Hinnant          __size_(__s)
643e519524SHoward Hinnant        {}
653e519524SHoward Hinnantpublic:
663e519524SHoward Hinnant    typedef _E        value_type;
673e519524SHoward Hinnant    typedef const _E& reference;
683e519524SHoward Hinnant    typedef const _E& const_reference;
693e519524SHoward Hinnant    typedef size_t    size_type;
703e519524SHoward Hinnant
713e519524SHoward Hinnant    typedef const _E* iterator;
723e519524SHoward Hinnant    typedef const _E* const_iterator;
733e519524SHoward Hinnant
743e519524SHoward Hinnant    _LIBCPP_ALWAYS_INLINE initializer_list() : __begin_(nullptr), __size_(0) {}
753e519524SHoward Hinnant
763e519524SHoward Hinnant    _LIBCPP_ALWAYS_INLINE size_t    size()  const {return __size_;}
773e519524SHoward Hinnant    _LIBCPP_ALWAYS_INLINE const _E* begin() const {return __begin_;}
783e519524SHoward Hinnant    _LIBCPP_ALWAYS_INLINE const _E* end()   const {return __begin_ + __size_;}
793e519524SHoward Hinnant};
803e519524SHoward Hinnant
819d4a2861SHoward Hinnanttemplate<class _E>
829d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY
839d4a2861SHoward Hinnantconst _E*
849d4a2861SHoward Hinnantbegin(initializer_list<_E> __il)
859d4a2861SHoward Hinnant{
869d4a2861SHoward Hinnant    return __il.begin();
879d4a2861SHoward Hinnant}
889d4a2861SHoward Hinnant
899d4a2861SHoward Hinnanttemplate<class _E>
909d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY
919d4a2861SHoward Hinnantconst _E*
929d4a2861SHoward Hinnantend(initializer_list<_E> __il)
939d4a2861SHoward Hinnant{
949d4a2861SHoward Hinnant    return __il.end();
959d4a2861SHoward Hinnant}
969d4a2861SHoward Hinnant
973e519524SHoward Hinnant}  // std
983e519524SHoward Hinnant
993e519524SHoward Hinnant#endif  // _LIBCPP_INITIALIZER_LIST
100