Skip to content

Commit 85079d5

Browse files
committed
Added initializer_list and construct vector from one
1 parent c689b16 commit 85079d5

2 files changed

Lines changed: 117 additions & 1 deletion

File tree

‎initializer_list‎

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
// std::initializer_list support -*- C++ -*-
2+
3+
// Copyright (C) 2008, 2009, 2010, 2011 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+
#if __cplusplus >= 201103L
34+
35+
#pragma GCC system_header
36+
37+
#pragma GCC visibility push(default)
38+
39+
//#include <bits/c++config.h>
40+
41+
namespace std
42+
{
43+
/// initializer_list
44+
template<class _E>
45+
class initializer_list
46+
{
47+
public:
48+
typedef _E value_type;
49+
typedef const _E& reference;
50+
typedef const _E& const_reference;
51+
typedef size_t size_type;
52+
typedef const _E* iterator;
53+
typedef const _E* const_iterator;
54+
55+
private:
56+
iterator _M_array;
57+
size_type _M_len;
58+
59+
// The compiler can call a private constructor.
60+
constexpr initializer_list(const_iterator __a, size_type __l)
61+
: _M_array(__a), _M_len(__l) { }
62+
63+
public:
64+
constexpr initializer_list() noexcept
65+
: _M_array(0), _M_len(0) { }
66+
67+
// Number of elements.
68+
constexpr size_type
69+
size() const noexcept { return _M_len; }
70+
71+
// First element.
72+
constexpr const_iterator
73+
begin() const noexcept { return _M_array; }
74+
75+
// One past the last element.
76+
constexpr const_iterator
77+
end() const noexcept { return begin() + size(); }
78+
};
79+
80+
/**
81+
* @brief Return an iterator pointing to the first element of
82+
* the initilizer_list.
83+
* @param __ils Initializer list.
84+
*/
85+
template<class _Tp>
86+
constexpr const _Tp*
87+
begin(initializer_list<_Tp> __ils) noexcept
88+
{ return __ils.begin(); }
89+
90+
/**
91+
* @brief Return an iterator pointing to one past the last element
92+
* of the initilizer_list.
93+
* @param __ils Initializer list.
94+
*/
95+
template<class _Tp>
96+
constexpr const _Tp*
97+
end(initializer_list<_Tp> __ils) noexcept
98+
{ return __ils.end(); }
99+
}
100+
101+
#pragma GCC visibility pop
102+
103+
#endif // __cplusplus >= 201103L
104+
#endif // _INITIALIZER_LIST

‎vector‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include <func_exception>
2525
#include <algorithm>
2626
#include <type_traits>
27-
27+
#include <initializer_list>
2828

2929
#ifndef __STD_HEADER_VECTOR
3030
#define __STD_HEADER_VECTOR
@@ -93,7 +93,19 @@ namespace std{
9393
a.construct(data+i, x.data[i]);
9494
}
9595
}
96+
#if __cplusplus >= 201103L
97+
_UCXXEXPORT vector(initializer_list<T> x,const Allocator& al= Allocator()):
98+
a(al)
99+
{
96100

101+
elements = x.size();
102+
data_size = elements + __UCLIBCXX_STL_BUFFER_SIZE__;
103+
data = a.allocate(data_size);
104+
size_type i = 0;
105+
for( auto xx : x )
106+
a.construct(data + i++, xx);
107+
}
108+
#endif
97109
_UCXXEXPORT ~vector(); //Below
98110

99111
_UCXXEXPORT vector<T,Allocator>& operator=(const vector<T,Allocator>& x){

0 commit comments

Comments
 (0)