Back to Arangodb

Expression Concepts

3rdParty/boost/1.78.0/libs/numeric/ublas/doc/expression_concept.html

3.12.9.117.8 KB
Original Source

Expression Concepts

Scalar Expression

Description

A Scalar Expression is an expression convertible to a scalar type.

Refinement of

Default Constructible.

Associated types

| Public base | scaler_expression<S> | S must be derived from this public base type. | | Value type | value_type | The type of the scalar expression. |

Notation

| S | A type that is a model of Scalar Expression |

Definitions

Valid expressions

In addition to the expressions defined in Default Constructible the following expressions must be valid.

NameExpressionType requirementsReturn type
Evaluationoperator value_type () constvalue_type

Expression semantics

Semantics of an expression is defined only where it differs from, or is not defined in Default Constructible.

NameExpressionPreconditionSemanticsPostcondition
Evaluationoperator value_type () constEvaluates the scalar expression.

Complexity guarantees

The run-time complexity of the evaluation is specific for the evaluated scalar expression.

Invariants

Models

  • vector_scalar_unary
  • vector_scalar_binary

Vector Expression

Description

A Vector Expression is an expression evaluatable to a vector. Vector Expression provides an Indexed Bidirectional Iterator or an Indexed Random Access Iterator .

Refinement of

Default Constructible.

Associated types

| Public base | vector_expression<V> | V must be derived from this public base type. | | Value type | value_type | The element type of the vector expression. | | Reference type | reference | The return type when accessing an element of a vector expression.
Convertable to avalue_type. | | Const reference type | const_reference | The return type when accessing an element of a constant vector expression.
Convertable to avalue_type. | | Size type | size_type | The index type of the vector expression. Am unsigned integral type used to represent size and index values.
Can represent any nonnegative value of difference_type. | | Distance type | difference_type | A signed integral type used to represent the distance between two of the vector expression's iterators. | | Const iterator type | const_iterator | A type of iterator that may be used to examine a vector expression's elements. | | Iterator type | iterator | A type of iterator that may be used to modify a vector expression's elements. | | Const reverse iterator type | const_reverse_iterator | A Reverse Iterator adaptor whose base iterator type is the vector expression's const iterator type. | | Reverse iterator type | reverse_iterator | A Reverse Iterator adaptor whose base iterator type is the vector expression's iterator type. |

Notation

| V | A type that is a model of Vector Expression | | v, v1, v2 | Object of type V | | i | Object of a type convertible to size_type | | t | Object of a type convertible to value_type |

Definitions

Valid expressions

In addition to the expressions defined in Default Constructible the following expressions must be valid.

NameExpressionType requirementsReturn type
Beginning of rangev.begin ()const_iterator
v.begin ()v is mutable.iterator
End of rangev.end ()const_iterator
v.end ()v is mutable.iterator
Sizev.size ()size_type
Swapv1.swap (v2)v1 and v2 are mutable.void
Beginning of reverse rangev.rbegin ()const_reverse_iterator
v.rbegin ()v is mutable.reverse_iterator
End of reverse rangev.rend ()const_reverse_iterator
v.rend ()v is mutable.reverse_iterator
Element accessv (i)i is convertible to size_type.Convertible to value_type.
Assignmentv2 = v1v2 is mutable and v1 is convertible to V.V &
v2.assign (v1)v2 is mutable and v1 is convertible to V.V &
Computed assignmentv2 += v1v2 is mutable and v1 is convertible to V.V &
v2.plus_assign (v1)v2 is mutable and v1 is convertible to V.V &
v2 -= v1v2 is mutable and v1 is convertible to V.V &
v2.minus_assign (v1)v2 is mutable and v1 is convertible to V.V &
v *= tv is mutable and t is convertible to value_type.V &

Expression semantics

Semantics of an expression is defined only where it differs from, or is not defined in Default Constructible.

NameExpressionPreconditionSemanticsPostcondition
Beginning of rangev.begin ()Returns an iterator pointing to the first element in the vector expression.v.begin () is either dereferenceable or past-the-end. It is past-the-end if and only if `v.size () ==
0`.
End of rangev.end ()Returns an iterator pointing one past the last element in the vector expression.v.end () is past-the-end.
Sizev.size ()Returns the size of the vector expression, that is, its number of elements.v.size () >= 0
Swapv1.swap (v2)Equivalent to swap (v1, v2).
Beginning of reverse rangev.rbegin ()Equivalent to reverse_iterator (v.end ()).v.rbegin () is either dereferenceable or past-the-end. It is past-the-end if and only if `v.size () ==
0`.
End of reverse rangev.rend ()Equivalent to reverse_iterator (v.begin ()).v.rend () is past-the-end.
Element accessv (i)0 <= i < v.size ()Returns the i-th element of the vector expression.
Assignmentv2 = v1v1.size () == v2.size ()Assigns every element of the evaluated vector expression v1 to the corresponding element of v2 .
v2.assign (v1)v1.size () == v2.size ()Assigns every element of v1 to the corresponding element of v2.
Computed assignmentv2 += v1v1.size () == v2.size ()Adds every element of the evaluated vector expression v1 to the corresponding element of v2.
v2.plus_assign (v1)v1.size () == v2.size ()Adds every element of v1 to the corresponding element of v2.
v2 -= v1v1.size () == v2.size ()Subtracts every element of the evaluated vector expression v1 from the corresponding element of v2 .
v2.minus_assign (v1)v1.size () == v2.size ()Subtracts every element of v1 from the corresponding element of v2.
v *= tMultiplies every element of v with t .

Complexity guarantees

The run-time complexity of begin () and end () is specific for the evaluated vector expression, typically amortized constant time.

The run-time complexity of size () is constant time.

The run-time complexity of swap () is specific for the evaluated vector expression, typically constant time.

The run-time complexity of rbegin () and rend () is specific for the evaluated vector expression, typically amortized constant time.

The run-time complexity of the element access is specific for the evaluated vector expression, typically amortized constant time for the dense and logarithmic for the sparse case.

The run-time complexity of the arithmetic operations is specific for the evaluated vector expressions, typically linear in the size of the expressions.

Invariants

| Valid range | For any vector expression v, [v.begin (), v.end ()) is a valid range. | | Completeness | An algorithm that iterates through the range [v.begin (), v.end ()) will pass through every element of v . | | Valid reverse range | [v.rbegin (), v.rend ()) is a valid range. | | Equivalence of ranges | The distance from v.begin () to v.end () is the same as the distance from v.rbegin () to v.rend (). |

Models

  • vector_range;
  • vector_slice
  • matrix_row
  • matrix_column
  • matrix_vector_range
  • matrix_vector_slice
  • vector_unary
  • vector_binary
  • vector_binary_scalar1
  • vector_binary_scalar2
  • matrix_vector_unary1
  • matrix_vector_unary2
  • matrix_vector_binary1
  • matrix_vector_binary2

Matrix Expression

Description

A Matrix Expression is an expression evaluatable to a matrix. Matrix Expression provides an Indexed Bidirectional Column/Row Iterator or an Indexed Random Access Column/Row Iterator .

Refinement of

Default Constructible.

Associated types

immutable types

| Public base | matrix_expression<M> | M must be derived from this public base type. | | Value type | value_type | The element type of the matrix expression. | | Const reference type | const_reference | The return type when accessing an element of a constant matrix expression.
Convertable to a value_type. | | Size type | size_type | The index type of the matrix expression. Am unsigned integral type used to represent size and index values.
Can represent any nonnegative value of difference_type. | | Distance type | difference_type | A signed integral type used to represent the distance between two of the matrix expression's iterators. | | Const iterator types | const_iterator1 | A type of column iterator that may be used to examine a matrix expression's elements. | | const_iterator2 | A type of row iterator that may be used to examine a matrix expression's elements. | | Const reverse iterator types | const_reverse_iterator1 | A Reverse Iterator adaptor whose base iterator type is the matrix expression's const column iterator type. | | const_reverse_iterator2 | A Reverse Iterator adaptor whose base iterator type is the matrix expression's const row iterator type. |

mutable types

| Reference type | reference | The return type when accessing an element of a matrix expression.
Convertable to a value_type. | | Iterator types | iterator1 | A type of column iterator that may be used to modify a matrix expression's elements. | | iterator2 | A type of row iterator that may be used to modify a matrix expression's elements. | | Reverse iterator types | reverse_iterator1 | A Reverse Iterator adaptor whose base iterator type is the matrix expression's column iterator type. | | reverse_iterator2 | A Reverse Iterator adaptor whose base iterator type is the matrix expression's row iterator type. |

Notation

| M | A type that is a model of Matrix Expression | | m, m1, m2 | Object of type M | | i, j | Objects of a type convertible to size_type | | t | Object of a type convertible to value_type |

Definitions

Valid expressions

In addition to the expressions defined in Default Constructible the following expressions must be valid.

immutable expressions
NameExpressionType requirementsReturn type
Sizem.size1 ()size_type
m.size2 ()size_type
possibly mutable expressions
NameExpressionType requirementsReturn type
Beginning of rangem.begin1 ()const_iterator1
m.begin2 ()const_iterator2
m.begin1 ()m is mutable.iterator1
m.begin2 ()m is mutable.iterator2
End of rangem.end1 ()const_iterator1
m.end2 ()const_iterator2
m.end1 ()m is mutable.iterator1
m.end2 ()m is mutable.iterator2
Swapm1.swap (m2)m1 and m2 are mutable.void
Beginning of reverse rangem.rbegin1 ()const_reverse_iterator1
m.rbegin2 ()const_reverse_iterator2
m.rbegin1 ()m is mutable.reverse_iterator1
m.rbegin2 ()m is mutable.reverse_iterator2
End of reverse rangem.rend1 ()const_reverse_iterator1
m.rend2 ()const_reverse_iterator2
m.rend1 ()m is mutable.reverse_iterator1
m.rend2 ()m is mutable.reverse_iterator2
Element accessm (i, j)i and j are convertible to size_type .Convertible to value_type.
Assignmentm2 = m1m2 is mutable and m1 is convertible to M.M &
m2.assign (m1)m2 is mutable and m1 is convertible to M.M &
Computed assignmentm2 += m1m2 is mutable and m1 is convertible to M.M &
m2.plus_assign (m1)m2 is mutable and m1 is convertible to M.M &
m2 -= m1m2 is mutable and m1 is convertible to M.M &
m2.minus_assign (m1)m2 is mutable and m1 is convertible to M.M &
m *= tm is mutable and t is convertible to value_type.M &

Expression semantics

Semantics of an expression is defined only where it differs from, or is not defined in Default Constructible.

NameExpressionPreconditionSemanticsPostcondition
Beginning of rangem.begin1 ()Returns an iterator pointing to the first element in the first column of a matrix expression.m.begin1 () is either dereferenceable or past-the-end. It is past-the-end if and only if `m.size1 () ==
0`.
m.begin2 ()Returns an iterator pointing to the first element in the first row of a matrix expression.m.begin2 () is either dereferenceable or past-the-end. It is past-the-end if and only if `m.size2 () ==
0`.
End of rangem.end1 ()Returns an iterator pointing one past the last element in the matrix expression.m.end1 () is past-the-end.
m.end2 ()Returns an iterator pointing one past the last element in the matrix expression.m.end2 () is past-the-end.
Sizem.size1 ()Returns the number of rows of the matrix expression.m.size1 () >= 0
m.size2 ()Returns the number of columns of the matrix expression.m.size2 () >= 0
Swapm1.swap (m2)Equivalent to swap (m1, m2).
Beginning of reverse rangem.rbegin1 ()Equivalent to reverse_iterator1 (m.end1 ()).m.rbegin1 () is either dereferenceable or past-the-end. It is past-the-end if and only if `m.size1 () ==
0`.
m.rbegin2 ()Equivalent to reverse_iterator2 (m.end2 ()).m.rbegin2 () is either dereferenceable or past-the-end. It is past-the-end if and only if `m.size2 () ==
0`.
End of reverse rangem.rend1 ()Equivalent to `reverse_iterator1 (m.begin1
())`.m.rend1 () is past-the-end.
m.rend2 ()Equivalent to `reverse_iterator2 (m.begin2
())`.m.rend2 () is past-the-end.
Element accessm (i, j)0 <= i < m.size1 () and `0 <= j <
m.size2 ()`Returns the j-th element of the i-th row of the matrix expression.
Assignmentm2 = m1m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Assigns every element of the evaluated matrix expression m1 to the corresponding element of m2 .
m2.assign (m1)m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Assigns every element of m1 to the corresponding element of m2.
Computed assignmentm2 += m1m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Adds every element of the evaluated matrix expression m1 to the corresponding element of m2.
m2.plus_assign (m1)m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Adds every element of m1 to the corresponding element of m2.
m2 -= m1m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Subtracts every element of the evaluated matrix expression m1 from the corresponding element of m2 .
m2.minus_assign (m1)m1.size1 () == m2.size1 () and `
m1.size2 () == m2.size2 ()`Subtracts every element of m1 from the corresponding element of m2.
m *= tMultiplies every element of m with t .

Complexity guarantees

The run-time complexity of begin1 (), begin2 () , end1 () and end2 () is specific for the evaluated matrix expression.

The run-time complexity of size1 () and size2 () is constant time.

The run-time complexity of swap () is specific for the evaluated matrix expression, typically constant time.

The run-time complexity of rbegin1 (), rbegin2 () , rend1 () and rend2 () is specific for the evaluated matrix expression.

The run-time complexity of the element access is specific for the evaluated matrix expression, typically amortized constant time for the dense and logarithmic for the sparse case.

The run-time complexity of the arithmetic operations is specific for the evaluated matrix expressions, typically quadratic in the size of the proxies.

Invariants

| Valid range | For any matrix expression m, [m.begin1 (), m.end1 ()) and [m.begin2 (), m.end2 ()) are valid ranges. | | Completeness | An algorithm that iterates through the range [m.begin1 (), m.end1 ()) will pass through every row of m , an algorithm that iterates through the range [m.begin2 (), m.end2 ()) will pass through every column of m . | | Valid reverse range | [m.rbegin1 (), m.rend1 ()) and [m.rbegin2 (), m.rend2 ()) are valid ranges. | | Equivalence of ranges | The distance from m.begin1 () to m.end1 () is the same as the distance from m.rbegin1 () to m.rend1 () and the distance from m.begin2 () to m.end2 () is the same as the distance from m.rbegin2 () to m.rend2 (). |

Models

  • matrix_range
  • matrix_slice;
  • triangular_adaptor
  • symmetric_adaptor
  • banded_adaptor
  • vector_matrix_binary
  • matrix_unary1
  • matrix_unary2
  • matrix_binary
  • matrix_binary_scalar1
  • matrix_binary_scalar2
  • matrix_matrix_binary

Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).