Skip to content

Commit

Permalink
Support vector initialization using an initializer list
Browse files Browse the repository at this point in the history
  • Loading branch information
mike-matera committed Nov 1, 2016
1 parent bc73b5e commit 88341ff
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 2 deletions.
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=ArduinoSTL
version=0.1.6
version=0.1.7
author=Mike Matera <matera@lifealgorithmic.com>
maintainer=Mike Matera <matera@lifealgorithmic.com>
sentence=A port of uClibc++ packaged as an Arduino library.
Expand Down
61 changes: 61 additions & 0 deletions src/initializer_list
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/* Copyright (C) 2016 Michael Matera

This file is part of the uClibc++ Library.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

*/


#ifndef __STD_HEADER_INITIALIZER_LIST
#define __STD_HEADER_INITIALIZER_LIST

#pragma GCC visibility push(default)

namespace std {

template<class T>
class initializer_list {

private:
const T* array;
size_t len;

// Initialize from a { ... } construct
initializer_list(const T *a, size_t l) {
}

public:

// default constructor
initializer_list() : array(NULL), len(0) {}

size_t size() const {
return len;
}

const T *begin() {
return array;
}

const T *end() {
return array + len;
}

};

}

#endif
12 changes: 11 additions & 1 deletion src/vector
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <func_exception>
#include <algorithm>
#include <type_traits>

#include <initializer_list>

#ifndef __STD_HEADER_VECTOR
#define __STD_HEADER_VECTOR
Expand Down Expand Up @@ -94,6 +94,16 @@ namespace std{
}
}

_UCXXEXPORT vector(initializer_list<T> in, const Allocator & al=Allocator()) :
a(al)
{
data_size = in.size() + __UCLIBCXX_STL_BUFFER_SIZE__;
elements = in.size();
data = a.allocate(data_size);
for(size_type i = 0; i < elements; i++)
a.construct(data+i, *(in.begin()+i));
}

_UCXXEXPORT ~vector(); //Below

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

0 comments on commit 88341ff

Please sign in to comment.