Skip to content
Snippets Groups Projects
Commit ef720003 authored by Henry Weller's avatar Henry Weller
Browse files

FixedList: Added void operator=(std::initializer_list<T>)

parent 900c804b
No related branches found
No related tags found
No related merge requests found
...@@ -76,6 +76,9 @@ int main(int argc, char *argv[]) ...@@ -76,6 +76,9 @@ int main(int argc, char *argv[])
Info<< "list3: " << list3 << nl Info<< "list3: " << list3 << nl
<< "list4: " << list4 << endl; << "list4: " << list4 << endl;
list4 = {1, 2, 3, 5};
Info<< "list4: " << list4 << nl;
FixedList<label, 5> list5{0, 1, 2, 3, 4}; FixedList<label, 5> list5{0, 1, 2, 3, 4};
Info<< "list5: " << list5 << endl; Info<< "list5: " << list5 << endl;
......
...@@ -110,32 +110,32 @@ public: ...@@ -110,32 +110,32 @@ public:
// Constructors // Constructors
//- Null constructor. //- Null constructor
inline FixedList(); inline FixedList();
//- Construct from value //- Construct from value
explicit inline FixedList(const T&); explicit inline FixedList(const T&);
//- Construct from C-array. //- Construct from C-array
explicit inline FixedList(const T v[Size]); explicit inline FixedList(const T v[Size]);
//- Construct given start and end iterators //- Construct given start and end iterators
template<class InputIterator> template<class InputIterator>
inline FixedList(InputIterator first, InputIterator last); inline FixedList(InputIterator first, InputIterator last);
//- Construct from brace-enclosed values //- Construct from an initializer list
inline FixedList(std::initializer_list<T>); inline FixedList(std::initializer_list<T>);
//- Construct from UList. //- Construct from UList
explicit inline FixedList(const UList<T>&); explicit inline FixedList(const UList<T>&);
//- Construct from SLList. //- Construct from SLList
explicit inline FixedList(const SLList<T>&); explicit inline FixedList(const SLList<T>&);
//- Copy constructor. //- Copy constructor
inline FixedList(const FixedList<T, Size>&); inline FixedList(const FixedList<T, Size>&);
//- Construct from Istream. //- Construct from Istream
FixedList(Istream&); FixedList(Istream&);
//- Clone //- Clone
...@@ -157,36 +157,36 @@ public: ...@@ -157,36 +157,36 @@ public:
//- Return a const pointer to the first data element, //- Return a const pointer to the first data element,
// similar to the STL front() method and the string::data() method // similar to the STL front() method and the string::data() method
// This can be used (with caution) when interfacing with C code. // This can be used (with caution) when interfacing with C code
inline const T* cdata() const; inline const T* cdata() const;
//- Return a pointer to the first data element, //- Return a pointer to the first data element,
// similar to the STL front() method and the string::data() method // similar to the STL front() method and the string::data() method
// This can be used (with caution) when interfacing with C code. // This can be used (with caution) when interfacing with C code
inline T* data(); inline T* data();
//- Return the first element of the list. //- Return the first element of the list
inline T& first(); inline T& first();
//- Return first element of the list. //- Return first element of the list
inline const T& first() const; inline const T& first() const;
//- Return the last element of the list. //- Return the last element of the list
inline T& last(); inline T& last();
//- Return the last element of the list. //- Return the last element of the list
inline const T& last() const; inline const T& last() const;
// Check // Check
//- Check start is within valid range (0 ... size-1). //- Check start is within valid range (0 ... size-1)
inline void checkStart(const label start) const; inline void checkStart(const label start) const;
//- Check size is within valid range (0 ... size). //- Check size is within valid range (0 ... size)
inline void checkSize(const label size) const; inline void checkSize(const label size) const;
//- Check index i is within valid range (0 ... size-1). //- Check index i is within valid range (0 ... size-1)
inline void checkIndex(const label i) const; inline void checkIndex(const label i) const;
...@@ -213,32 +213,35 @@ public: ...@@ -213,32 +213,35 @@ public:
// Member operators // Member operators
//- Return element of FixedList. //- Return element of FixedList
inline T& operator[](const label); inline T& operator[](const label);
//- Return element of constant FixedList. //- Return element of constant FixedList
inline const T& operator[](const label) const; inline const T& operator[](const label) const;
//- Assignment from array operator. Takes linear time. //- Assignment from array operator. Takes linear time
inline void operator=(const T v[Size]); inline void operator=(const T v[Size]);
//- Assignment from UList operator. Takes linear time. //- Assignment from UList operator. Takes linear time
inline void operator=(const UList<T>&); inline void operator=(const UList<T>&);
//- Assignment from SLList operator. Takes linear time. //- Assignment from SLList operator. Takes linear time
inline void operator=(const SLList<T>&); inline void operator=(const SLList<T>&);
//- Assignment from an initializer list. Takes linear time
inline void operator=(std::initializer_list<T>);
//- Assignment of all entries to the given value //- Assignment of all entries to the given value
inline void operator=(const T&); inline void operator=(const T&);
// STL type definitions // STL type definitions
//- Type of values the FixedList contains. //- Type of values the FixedList contains
typedef T value_type; typedef T value_type;
//- Type that can be used for storing into //- Type that can be used for storing into
// FixedList::value_type objects. // FixedList::value_type objects
typedef T& reference; typedef T& reference;
//- Type that can be used for storing into //- Type that can be used for storing into
...@@ -246,85 +249,85 @@ public: ...@@ -246,85 +249,85 @@ public:
typedef const T& const_reference; typedef const T& const_reference;
//- The type that can represent the difference between any two //- The type that can represent the difference between any two
// FixedList iterator objects. // FixedList iterator objects
typedef label difference_type; typedef label difference_type;
//- The type that can represent the size of a FixedList. //- The type that can represent the size of a FixedList
typedef label size_type; typedef label size_type;
// STL iterator // STL iterator
//- Random access iterator for traversing FixedList. //- Random access iterator for traversing FixedList
typedef T* iterator; typedef T* iterator;
//- Return an iterator to begin traversing the FixedList. //- Return an iterator to begin traversing the FixedList
inline iterator begin(); inline iterator begin();
//- Return an iterator to end traversing the FixedList. //- Return an iterator to end traversing the FixedList
inline iterator end(); inline iterator end();
// STL const_iterator // STL const_iterator
//- Random access iterator for traversing FixedList. //- Random access iterator for traversing FixedList
typedef const T* const_iterator; typedef const T* const_iterator;
//- Return const_iterator to begin traversing the constant FixedList. //- Return const_iterator to begin traversing the constant FixedList
inline const_iterator cbegin() const; inline const_iterator cbegin() const;
//- Return const_iterator to end traversing the constant FixedList. //- Return const_iterator to end traversing the constant FixedList
inline const_iterator cend() const; inline const_iterator cend() const;
//- Return const_iterator to begin traversing the constant FixedList. //- Return const_iterator to begin traversing the constant FixedList
inline const_iterator begin() const; inline const_iterator begin() const;
//- Return const_iterator to end traversing the constant FixedList. //- Return const_iterator to end traversing the constant FixedList
inline const_iterator end() const; inline const_iterator end() const;
// STL reverse_iterator // STL reverse_iterator
//- Reverse iterator for reverse traversal of FixedList. //- Reverse iterator for reverse traversal of FixedList
typedef T* reverse_iterator; typedef T* reverse_iterator;
//- Return reverse_iterator to begin reverse traversing the FixedList. //- Return reverse_iterator to begin reverse traversing the FixedList
inline reverse_iterator rbegin(); inline reverse_iterator rbegin();
//- Return reverse_iterator to end reverse traversing the FixedList. //- Return reverse_iterator to end reverse traversing the FixedList
inline reverse_iterator rend(); inline reverse_iterator rend();
// STL const_reverse_iterator // STL const_reverse_iterator
//- Reverse iterator for reverse traversal of constant FixedList. //- Reverse iterator for reverse traversal of constant FixedList
typedef const T* const_reverse_iterator; typedef const T* const_reverse_iterator;
//- Return const_reverse_iterator to begin reverse traversing FixedList. //- Return const_reverse_iterator to begin reverse traversing FixedList
inline const_reverse_iterator crbegin() const; inline const_reverse_iterator crbegin() const;
//- Return const_reverse_iterator to end reverse traversing FixedList. //- Return const_reverse_iterator to end reverse traversing FixedList
inline const_reverse_iterator crend() const; inline const_reverse_iterator crend() const;
//- Return const_reverse_iterator to begin reverse traversing FixedList. //- Return const_reverse_iterator to begin reverse traversing FixedList
inline const_reverse_iterator rbegin() const; inline const_reverse_iterator rbegin() const;
//- Return const_reverse_iterator to end reverse traversing FixedList. //- Return const_reverse_iterator to end reverse traversing FixedList
inline const_reverse_iterator rend() const; inline const_reverse_iterator rend() const;
// STL member functions // STL member functions
//- Return the number of elements in the FixedList. //- Return the number of elements in the FixedList
inline label size() const; inline label size() const;
//- Return size of the largest possible FixedList. //- Return size of the largest possible FixedList
inline label max_size() const; inline label max_size() const;
//- Return true if the FixedList is empty (ie, size() is zero). //- Return true if the FixedList is empty (ie, size() is zero)
inline bool empty() const; inline bool empty() const;
//- Swap two FixedLists of the same type in constant time. //- Swap two FixedLists of the same type in constant time
void swap(FixedList<T, Size>&); void swap(FixedList<T, Size>&);
...@@ -332,32 +335,32 @@ public: ...@@ -332,32 +335,32 @@ public:
//- Equality operation on FixedLists of the same type. //- Equality operation on FixedLists of the same type.
// Returns true when the FixedLists are elementwise equal // Returns true when the FixedLists are elementwise equal
// (using FixedList::value_type::operator==). Takes linear time. // (using FixedList::value_type::operator==). Takes linear time
bool operator==(const FixedList<T, Size>&) const; bool operator==(const FixedList<T, Size>&) const;
//- The opposite of the equality operation. Takes linear time. //- The opposite of the equality operation. Takes linear time
bool operator!=(const FixedList<T, Size>&) const; bool operator!=(const FixedList<T, Size>&) const;
//- Compare two FixedLists lexicographically. Takes linear time. //- Compare two FixedLists lexicographically. Takes linear time
bool operator<(const FixedList<T, Size>&) const; bool operator<(const FixedList<T, Size>&) const;
//- Compare two FixedLists lexicographically. Takes linear time. //- Compare two FixedLists lexicographically. Takes linear time
bool operator>(const FixedList<T, Size>&) const; bool operator>(const FixedList<T, Size>&) const;
//- Return true if !(a > b). Takes linear time. //- Return true if !(a > b). Takes linear time
bool operator<=(const FixedList<T, Size>&) const; bool operator<=(const FixedList<T, Size>&) const;
//- Return true if !(a < b). Takes linear time. //- Return true if !(a < b). Takes linear time
bool operator>=(const FixedList<T, Size>&) const; bool operator>=(const FixedList<T, Size>&) const;
// IOstream operators // IOstream operators
//- Read List from Istream, discarding contents of existing List. //- Read List from Istream, discarding contents of existing List
friend Istream& operator>> <T, Size> friend Istream& operator>> <T, Size>
(Istream&, FixedList<T, Size>&); (Istream&, FixedList<T, Size>&);
// Write FixedList to Ostream. //- Write FixedList to Ostream
friend Ostream& operator<< <T, Size> friend Ostream& operator<< <T, Size>
( (
Ostream&, Ostream&,
......
...@@ -298,15 +298,22 @@ inline void Foam::FixedList<T, Size>::operator=(const SLList<T>& lst) ...@@ -298,15 +298,22 @@ inline void Foam::FixedList<T, Size>::operator=(const SLList<T>& lst)
{ {
checkSize(lst.size()); checkSize(lst.size());
label i = 0; typename SLList<T>::const_iterator iter = lst.begin();
for for (unsigned i=0; i<Size; i++)
(
typename SLList<T>::const_iterator iter = lst.begin();
iter != lst.end();
++iter
)
{ {
operator[](i++) = iter(); v_[i] = *iter++;
}
}
template<class T, unsigned Size>
inline void Foam::FixedList<T, Size>::operator=(std::initializer_list<T> lst)
{
checkSize(lst.size());
typename std::initializer_list<T>::iterator iter = lst.begin();
for (unsigned i=0; i<Size; i++)
{
v_[i] = *iter++;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment