Reference documentation for deal.II version Git 9297d75edf 2020-11-26 18:52:14 +0100
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
Table< 2, T > Class Template Reference

#include <deal.II/base/table.h>

Inheritance diagram for Table< 2, T >:
[legend]

Public Types

using size_type = typename TableBase< 2, T >::size_type
 
using value_type = typename AlignedVector< T >::value_type
 
using reference = typename AlignedVector< T >::reference
 
using const_reference = typename AlignedVector< T >::const_reference
 
using const_iterator = MatrixTableIterators::Iterator< Table< 2, T >, true, MatrixTableIterators::Storage::row_major >
 
using iterator = MatrixTableIterators::Iterator< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >
 

Public Member Functions

 Table ()=default
 
 Table (const size_type size1, const size_type size2)
 
template<typename InputIterator >
 Table (const size_type size1, const size_type size2, InputIterator entries, const bool C_style_indexing=true)
 
void reinit (const size_type size1, const size_type size2, const bool omit_default_initialization=false)
 
::internal::TableBaseAccessors::Accessor< 2, T, true, 1 > operator[] (const size_type i) const
 
::internal::TableBaseAccessors::Accessor< 2, T, false, 1 > operator[] (const size_type i)
 
AlignedVector< T >::const_reference operator() (const size_type i, const size_type j) const
 
AlignedVector< T >::reference operator() (const size_type i, const size_type j)
 
AlignedVector< T >::reference operator() (const TableIndices< 2 > &indices)
 
AlignedVector< T >::const_reference operator() (const TableIndices< 2 > &indices) const
 
size_type n_rows () const
 
size_type n_cols () const
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
bool operator== (const TableBase< N, T > &T2) const
 
void reset_values ()
 
void reinit (const TableIndices< N > &new_size, const bool omit_default_initialization=false)
 
size_type size (const unsigned int i) const
 
const TableIndices< N > & size () const
 
size_type n_elements () const
 
bool empty () const
 
void fill (InputIterator entries, const bool C_style_indexing=true)
 
void fill (const T &value)
 
AlignedVector< T >::reference operator() (const TableIndices< N > &indices)
 
AlignedVector< T >::const_reference operator() (const TableIndices< N > &indices) const
 
void swap (TableBase< N, T > &v)
 
std::size_t memory_consumption () const
 
void serialize (Archive &ar, const unsigned int version)
 
Subscriptor functionality

Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class.

void subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const
 
void unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const
 
unsigned int n_subscriptions () const
 
template<typename StreamType >
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 

Static Public Member Functions

static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 

Protected Member Functions

AlignedVector< T >::reference el (const size_type i, const size_type j)
 
AlignedVector< T >::const_reference el (const size_type i, const size_type j) const
 
size_type position (const TableIndices< N > &indices) const
 
AlignedVector< T >::reference el (const TableIndices< N > &indices)
 
AlignedVector< T >::const_reference el (const TableIndices< N > &indices) const
 

Protected Attributes

AlignedVector< T > values
 
TableIndices< N > table_size
 

Friends

class MatrixTableIterators::AccessorBase< Table< 2, T >, true, MatrixTableIterators::Storage::row_major >
 
class MatrixTableIterators::AccessorBase< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >
 
class MatrixTableIterators::Accessor< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >
 

Detailed Description

template<typename T>
class Table< 2, T >

A class representing a two-dimensional table, i.e. a matrix of objects (not necessarily only numbers).

For the rationale of this class, and a description of the interface, see the base class. Since this serves as the base class of the full matrix classes in this library, and to keep a minimal compatibility with a predecessor class (vector2d), some additional functions are provided.

Definition at line 1127 of file table.h.

Member Typedef Documentation

◆ size_type

template<typename T >
using Table< 2, T >::size_type = typename TableBase<2, T>::size_type

Integer type used to count the number of elements in this container.

Definition at line 1133 of file table.h.

◆ value_type

template<typename T >
using Table< 2, T >::value_type = typename AlignedVector<T>::value_type

Typedef for the values in the table.

Definition at line 1138 of file table.h.

◆ reference

template<typename T >
using Table< 2, T >::reference = typename AlignedVector<T>::reference

Typedef for the references in the table.

Definition at line 1143 of file table.h.

◆ const_reference

template<typename T >
using Table< 2, T >::const_reference = typename AlignedVector<T>::const_reference

Typedef for the constant references in the table.

Definition at line 1148 of file table.h.

◆ const_iterator

template<typename T >
using Table< 2, T >::const_iterator = MatrixTableIterators:: Iterator<Table<2, T>, true, MatrixTableIterators::Storage::row_major>

Typedef for a constant iterator that traverses the table in column-major order.

Definition at line 1155 of file table.h.

◆ iterator

template<typename T >
using Table< 2, T >::iterator = MatrixTableIterators:: Iterator<Table<2, T>, false, MatrixTableIterators::Storage::row_major>

Typedef for an iterator that traverses the table in column-major order.

Definition at line 1161 of file table.h.

Constructor & Destructor Documentation

◆ Table() [1/3]

template<typename T >
Table< 2, T >::Table ( )
default

Default constructor. Set all dimensions to zero.

◆ Table() [2/3]

template<typename T >
Table< 2, T >::Table ( const size_type  size1,
const size_type  size2 
)

Constructor. Pass down the given dimensions to the base class.

◆ Table() [3/3]

template<typename T >
template<typename InputIterator >
Table< 2, T >::Table ( const size_type  size1,
const size_type  size2,
InputIterator  entries,
const bool  C_style_indexing = true 
)

Constructor. Create a table with a given size and initialize it from a set of iterators.

This function is entirely equivalent to creating a table t of the given size and then calling

t.fill (entries, C_style_indexing);

on it, using the TableBase::fill() function where the arguments are explained in more detail. The point, however, is that that is only possible if the table can be changed after running the constructor, whereas calling the current constructor allows sizing and initializing an object right away so that it can be marked const.

Using this constructor, you can do things like this:

const double values[] = { 1, 2, 3, 4, 5, 6 };
const Table<2,double> t(2, 3, entries, true);

You can also initialize a table right from a file, using input iterators:

std::ifstream input ("myfile");
const Table<2,double> t(2, 3,
std::istream_iterator<double>(input),
true);
Parameters
size1The size of this table in the first dimension.
size2The size of this table in the second dimension.
entriesAn iterator to a set of elements from which to initialize this table. It is assumed that iterator can be incremented and dereferenced a sufficient number of times to fill this table.
C_style_indexingIf true, run over elements of the table with the last index changing fastest as we dereference subsequent elements of the input range. If false, change the first index fastest.

Member Function Documentation

◆ reinit() [1/2]

template<typename T >
void Table< 2, T >::reinit ( const size_type  size1,
const size_type  size2,
const bool  omit_default_initialization = false 
)

Reinitialize the object. This function is mostly here for compatibility with the earlier vector2d class. Passes down to the base class by converting the arguments to the data type requested by the base class.

◆ operator[]() [1/2]

template<typename T >
::internal::TableBaseAccessors::Accessor<2, T, true, 1> Table< 2, T >::operator[] ( const size_type  i) const

Access operator. Generate an object that accesses the requested row of this two-dimensional table. Range checks are performed.

This version of the function only allows read access.

◆ operator[]() [2/2]

template<typename T >
::internal::TableBaseAccessors::Accessor<2, T, false, 1> Table< 2, T >::operator[] ( const size_type  i)

Access operator. Generate an object that accesses the requested row of this two-dimensional table. Range checks are performed.

This version of the function allows read-write access.

◆ operator()() [1/6]

template<typename T >
AlignedVector<T>::const_reference Table< 2, T >::operator() ( const size_type  i,
const size_type  j 
) const

Direct access to one element of the table by specifying all indices at the same time. Range checks are performed.

This version of the function only allows read access.

◆ operator()() [2/6]

template<typename T >
AlignedVector<T>::reference Table< 2, T >::operator() ( const size_type  i,
const size_type  j 
)

Direct access to one element of the table by specifying all indices at the same time. Range checks are performed.

This version of the function allows read-write access.

◆ operator()() [3/6]

template<typename T >
AlignedVector<T>::reference Table< 2, T >::operator() ( const TableIndices< 2 > &  indices)

Make the corresponding operator () from the TableBase base class available also in this class.

◆ operator()() [4/6]

template<typename T >
AlignedVector<T>::const_reference Table< 2, T >::operator() ( const TableIndices< 2 > &  indices) const

Make the corresponding operator () from the TableBase base class available also in this class.

◆ n_rows()

template<typename T >
size_type Table< 2, T >::n_rows ( ) const

Number of rows. This function really makes only sense since we have a two-dimensional object here.

◆ n_cols()

template<typename T >
size_type Table< 2, T >::n_cols ( ) const

Number of columns. This function really makes only sense since we have a two-dimensional object here.

◆ begin() [1/2]

template<typename T >
iterator Table< 2, T >::begin ( )

Return an iterator pointing to the first entry.

◆ begin() [2/2]

template<typename T >
const_iterator Table< 2, T >::begin ( ) const

Return a constant iterator pointing to the first entry.

◆ end() [1/2]

template<typename T >
iterator Table< 2, T >::end ( )

Return an iterator pointing to one past the last entry.

◆ end() [2/2]

template<typename T >
const_iterator Table< 2, T >::end ( ) const

Return a constant iterator pointing to one past the last entry.

◆ el() [1/4]

template<typename T >
AlignedVector<T>::reference Table< 2, T >::el ( const size_type  i,
const size_type  j 
)
protected

Return a read-write reference to the element (i,j).

This function does no bounds checking and is only to be used internally and in functions already checked.

These functions are mainly here for compatibility with a former implementation of these table classes for 2d arrays, then called vector2d.

◆ el() [2/4]

template<typename T >
AlignedVector<T>::const_reference Table< 2, T >::el ( const size_type  i,
const size_type  j 
) const
protected

Return the value of the element (i,j) as a read-only reference.

This function does no bounds checking and is only to be used internally and in functions already checked.

We return the requested value as a constant reference rather than by value since this object may hold data types that may be large, and we don't know here whether copying is expensive or not.

These functions are mainly here for compatibility with a former implementation of these table classes for 2d arrays, then called vector2d.

◆ operator==()

bool TableBase< N, T >::operator== ( const TableBase< N, T > &  T2) const
inherited

Test for equality of two tables.

◆ reset_values()

void TableBase< N, T >::reset_values ( )
inherited

Set all entries to their default value (i.e. copy them over with default constructed objects). Do not change the size of the table, though.

◆ reinit() [2/2]

void TableBase< N, T >::reinit ( const TableIndices< N > &  new_size,
const bool  omit_default_initialization = false 
)
inherited

Set the dimensions of this object to the sizes given in the first argument, and allocate the required memory for table entries to accommodate these sizes. If omit_default_initialization is set to false, all elements of the table are set to a default constructed object for the element type. Otherwise the memory is left in an uninitialized or otherwise undefined state.

◆ size() [1/2]

size_type TableBase< N, T >::size ( const unsigned int  i) const
inherited

Size of the table in direction i.

◆ size() [2/2]

const TableIndices<N>& TableBase< N, T >::size ( ) const
inherited

Return the sizes of this object in each direction.

◆ n_elements()

size_type TableBase< N, T >::n_elements ( ) const
inherited

Return the number of elements stored in this object, which is the product of the extensions in each dimension.

◆ empty()

bool TableBase< N, T >::empty ( ) const
inherited

Return whether the object is empty, i.e. one of the directions is zero. This is equivalent to n_elements()==0.

◆ fill() [1/2]

void TableBase< N, T >::fill ( InputIterator  entries,
const bool  C_style_indexing = true 
)
inherited

Fill this table (which is assumed to already have the correct size) from a source given by dereferencing the given forward iterator (which could, for example, be a pointer to the first element of an array, or an inserting std::istream_iterator). The second argument denotes whether the elements pointed to are arranged in a way that corresponds to the last index running fastest or slowest. The default is to use C-style indexing where the last index runs fastest (as opposed to Fortran-style where the first index runs fastest when traversing multidimensional arrays. For example, if you try to fill an object of type Table<2,T>, then calling this function with the default value for the second argument will result in the equivalent of doing

for (unsigned int i=0; i<t.size(0); ++i)
for (unsigned int j=0; j<t.size(1); ++j)
t[i][j] = *entries++;

On the other hand, if the second argument to this function is false, then this would result in code of the following form:

for (unsigned int j=0; j<t.size(1); ++j)
for (unsigned int i=0; i<t.size(0); ++i)
t[i][j] = *entries++;

Note the switched order in which we fill the table elements by traversing the given set of iterators.

Parameters
entriesAn iterator to a set of elements from which to initialize this table. It is assumed that iterator can be incremented and dereferenced a sufficient number of times to fill this table.
C_style_indexingIf true, run over elements of the table with the last index changing fastest as we dereference subsequent elements of the input range. If false, change the first index fastest.

◆ fill() [2/2]

void TableBase< N, T >::fill ( const T &  value)
inherited

Fill all table entries with the same value.

◆ operator()() [5/6]

AlignedVector<T>::reference TableBase< N, T >::operator() ( const TableIndices< N > &  indices)
inherited

Return a read-write reference to the indicated element.

◆ operator()() [6/6]

AlignedVector<T>::const_reference TableBase< N, T >::operator() ( const TableIndices< N > &  indices) const
inherited

Return the value of the indicated element as a read-only reference.

We return the requested value as a constant reference rather than by value since this object may hold data types that may be large, and we don't know here whether copying is expensive or not.

◆ swap()

void TableBase< N, T >::swap ( TableBase< N, T > &  v)
inherited

Swap the contents of this table and the other table v. One could do this operation with a temporary variable and copying over the data elements, but this function is significantly more efficient since it only swaps the pointers to the data of the two vectors and therefore does not need to allocate temporary storage and move data around.

This function is analogous to the swap function of all C++ standard containers. Also, there is a global function swap(u,v) that simply calls u.swap(v), again in analogy to standard functions.

◆ memory_consumption()

std::size_t TableBase< N, T >::memory_consumption ( ) const
inherited

Determine an estimate for the memory consumption (in bytes) of this object.

◆ serialize()

void TableBase< N, T >::serialize ( Archive &  ar,
const unsigned int  version 
)
inherited

Write or read the data of this object to or from a stream for the purpose of serialization.

◆ position()

size_type TableBase< N, T >::position ( const TableIndices< N > &  indices) const
protectedinherited

Return the position of the indicated element within the array of elements stored one after the other. This function does no index checking.

◆ el() [3/4]

AlignedVector<T>::reference TableBase< N, T >::el ( const TableIndices< N > &  indices)
protectedinherited

Return a read-write reference to the indicated element.

This function does no bounds checking and is only to be used internally and in functions already checked.

◆ el() [4/4]

AlignedVector<T>::const_reference TableBase< N, T >::el ( const TableIndices< N > &  indices) const
protectedinherited

Return the value of the indicated element as a read-only reference.

This function does no bounds checking and is only to be used internally and in functions already checked.

We return the requested value as a constant reference rather than by value since this object may hold data types that may be large, and we don't know here whether copying is expensive or not.

◆ subscribe()

void Subscriptor::subscribe ( std::atomic< bool > *const  validity,
const std::string &  identifier = "" 
) const
inherited

Subscribes a user of the object by storing the pointer validity. The subscriber may be identified by text supplied as identifier.

Definition at line 136 of file subscriptor.cc.

◆ unsubscribe()

void Subscriptor::unsubscribe ( std::atomic< bool > *const  validity,
const std::string &  identifier = "" 
) const
inherited

Unsubscribes a user from the object.

Note
The identifier and the validity pointer must be the same as the one supplied to subscribe().

Definition at line 156 of file subscriptor.cc.

◆ n_subscriptions()

unsigned int Subscriptor::n_subscriptions ( ) const
inlineinherited

Return the present number of subscriptions to this object. This allows to use this class for reference counted lifetime determination where the last one to unsubscribe also deletes the object.

Definition at line 300 of file subscriptor.h.

◆ list_subscribers() [1/2]

template<typename StreamType >
void Subscriptor::list_subscribers ( StreamType &  stream) const
inlineinherited

List the subscribers to the input stream.

Definition at line 317 of file subscriptor.h.

◆ list_subscribers() [2/2]

void Subscriptor::list_subscribers ( ) const
inherited

List the subscribers to deallog.

Definition at line 204 of file subscriptor.cc.

Friends And Related Function Documentation

◆ MatrixTableIterators::AccessorBase< Table< 2, T >, true, MatrixTableIterators::Storage::row_major >

template<typename T >
friend class MatrixTableIterators:: AccessorBase< Table< 2, T >, true, MatrixTableIterators::Storage::row_major >
friend

Definition at line 1352 of file table.h.

◆ MatrixTableIterators::AccessorBase< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >

template<typename T >
friend class MatrixTableIterators:: AccessorBase< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >
friend

Definition at line 1354 of file table.h.

◆ MatrixTableIterators::Accessor< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >

template<typename T >
friend class MatrixTableIterators:: Accessor< Table< 2, T >, false, MatrixTableIterators::Storage::row_major >
friend

Definition at line 1359 of file table.h.

Member Data Documentation

◆ values

AlignedVector<T> TableBase< N, T >::values
protectedinherited

Component-array.

Definition at line 661 of file table.h.

◆ table_size

TableIndices<N> TableBase< N, T >::table_size
protectedinherited

Size in each direction of the table.

Definition at line 666 of file table.h.


The documentation for this class was generated from the following file: