Audacity  3.0.3
wxArrayStringEx.h
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  @file wxArrayStringEx.h
6 
7  Paul Licameli split from MemoryX.h
8 
9  **********************************************************************/
10 
11 #ifndef __AUDACITY_WX_ARRAY_STRING_EX__
12 #define __AUDACITY_WX_ARRAY_STRING_EX__
13 
14 #include <wx/arrstr.h>
15 
17 class wxArrayStringEx : public wxArrayString
18 {
19 public:
20  using wxArrayString::wxArrayString;
21  wxArrayStringEx() = default;
22 
23  template< typename Iterator >
24  wxArrayStringEx( Iterator start, Iterator finish )
25  {
26  this->reserve( std::distance( start, finish ) );
27  while( start != finish )
28  this->push_back( *start++ );
29  }
30 
31  template< typename T >
32  wxArrayStringEx( std::initializer_list< T > items )
33  {
34  this->reserve( this->size() + items.size() );
35  for ( const auto &item : items )
36  this->push_back( item );
37  }
38 
40  wxArrayStringEx( wxArrayString &&other )
41  {
42  swap( other );
43  }
44 
46  wxArrayStringEx &operator= ( wxArrayString &&other )
47  {
48  if ( this != &other ) {
49  clear();
50  swap( other );
51  }
52  return *this;
53  }
54 
55  using wxArrayString::insert;
56 
57  template< typename T >
58  iterator insert( const_iterator pos, std::initializer_list< T > items )
59  {
60  const auto index = pos - ((const wxArrayString*)this)->begin();
61  this->wxArrayString::Insert( {}, index, items.size() );
62  auto result = this->begin() + index, iter = result;
63  for ( auto pItem = items.begin(), pEnd = items.end();
64  pItem != pEnd;
65  ++pItem, ++iter
66  ) {
67  *iter = *pItem;
68  }
69  return result;
70  }
71 };
72 
73 #endif
wxArrayStringEx::wxArrayStringEx
wxArrayStringEx(std::initializer_list< T > items)
Definition: wxArrayStringEx.h:32
wxArrayStringEx::operator=
wxArrayStringEx & operator=(wxArrayString &&other)
The move operations can take arguments of the base class wxArrayString.
Definition: wxArrayStringEx.h:46
wxArrayStringEx::wxArrayStringEx
wxArrayStringEx()=default
wxArrayStringEx
Extend wxArrayString with move operations and construction and insertion fromstd::initializer_list.
Definition: wxArrayStringEx.h:18
wxArrayStringEx::insert
iterator insert(const_iterator pos, std::initializer_list< T > items)
Definition: wxArrayStringEx.h:58
wxArrayStringEx::wxArrayStringEx
wxArrayStringEx(wxArrayString &&other)
The move operations can take arguments of the base class wxArrayString.
Definition: wxArrayStringEx.h:40
anonymous_namespace{NoteTrack.cpp}::swap
void swap(std::unique_ptr< Alg_seq > &a, std::unique_ptr< Alg_seq > &b)
Definition: NoteTrack.cpp:735
wxArrayStringEx::wxArrayStringEx
wxArrayStringEx(Iterator start, Iterator finish)
Definition: wxArrayStringEx.h:24