*/
BlockIndices (const std::vector<size_type> &block_sizes);
+#ifdef DEAL_II_WITH_CXX11
+ /**
+ * Move constructor. Initialize a new object by stealing the internal data of
+ * another BlockIndices object.
+ *
+ * @note This constructor is only available if deal.II is configured with
+ * C++11 support.
+ */
+ BlockIndices (BlockIndices &&b);
+
+ /**
+ * Copy constructor.
+ */
+ BlockIndices (const BlockIndices &) = default;
+#endif
+
/**
* Specialized constructor for a structure with blocks of equal size.
*/
*/
BlockIndices &operator = (const BlockIndices &b);
+#ifdef DEAL_II_WITH_CXX11
+ /**
+ * Move assignment operator. Move another BlockIndices object onto the
+ * current one by transferring its contents.
+ */
+ BlockIndices &operator = (BlockIndices &&);
+#endif
+
/**
* Compare whether two objects are the same, i.e. whether the number of
* blocks and the sizes of all blocks are equal.
}
+
+#ifdef DEAL_II_WITH_CXX11
+
+inline
+BlockIndices::BlockIndices (BlockIndices &&b)
+ :
+ n_blocks(b.n_blocks),
+ start_indices(std::move(b.start_indices))
+{
+ b.n_blocks = 0;
+ b.start_indices = std::vector<size_type>(1, 0);
+}
+
+#endif
+
+
+
inline
void
BlockIndices::push_back(const size_type sz)
+#ifdef DEAL_II_WITH_CXX11
+inline
+BlockIndices &
+BlockIndices::operator = (BlockIndices &&b)
+{
+ start_indices = std::move(b.start_indices);
+ n_blocks = b.n_blocks;
+
+ b.start_indices = std::vector<size_type>(1, 0);
+ b.n_blocks = 0;
+
+ return *this;
+}
+#endif
+
+
+
inline
bool
BlockIndices::operator == (const BlockIndices &b) const
DEAL::string: [4->4,3,2,1|10]
DEAL:: 0:0:0 1:0:1 2:0:2 3:0:3 4:1:0 5:1:1 6:1:2 7:2:0 8:2:1 9:3:0
DEAL:: 0:0:0 1:0:1 2:0:2 3:0:3 4:1:0 5:1:1 6:1:2 7:2:0 8:2:1 9:3:0
+DEAL::sizes: 4:[4 3 2 1]->10
+DEAL::start: 0 4 7 9
+DEAL::string: [4->4,3,2,1|10]
+DEAL:: 0:0:0 1:0:1 2:0:2 3:0:3 4:1:0 5:1:1 6:1:2 7:2:0 8:2:1 9:3:0
+DEAL:: 0:0:0 1:0:1 2:0:2 3:0:3 4:1:0 5:1:1 6:1:2 7:2:0 8:2:1 9:3:0
+DEAL::empty: 0:[]->0