Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement new Table<3, T>::reinit() #13364

Merged
merged 1 commit into from
Feb 13, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
25 changes: 25 additions & 0 deletions include/deal.II/base/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -1549,6 +1549,18 @@ class Table<3, T> : public TableBase<3, T>
InputIterator entries,
const bool C_style_indexing = true);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be possible to simply implement any size with a variadic template?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could, like the TableIndices class does (see #13375, completely coincidentally). The problem is that variadic template packs must come last in the argument list, and so these kinds of functions can also not have trailing defaulted arguments.


/**
* Reinitialize the object. Passes down to the base class
* by converting the arguments to the data type requested by the base class.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm coming late to this patch, but there is nothing to be converted in this function. Is this a copy-paste mistake, or am I just not understanding what you are referring to here?

*/
void
reinit(const size_type size1,
const size_type size2,
const size_type size3,
const bool omit_default_initialization = false);

using TableBase<3, T>::reinit;

/**
* Access operator. Generate an object that accesses the requested two-
* dimensional subobject of this three-dimensional table. Range checks are
Expand Down Expand Up @@ -3238,6 +3250,19 @@ inline Table<3, T>::Table(const size_type size1,



template <typename T>
inline void
Table<3, T>::reinit(const size_type size1,
const size_type size2,
const size_type size3,
const bool omit_default_initialization)
{
this->TableBase<3, T>::reinit(TableIndices<3>(size1, size2, size3),
omit_default_initialization);
}



template <typename T>
inline dealii::internal::TableBaseAccessors::Accessor<3, T, true, 2>
Table<3, T>::operator[](const size_type i) const
Expand Down