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.
Name |
Expression |
Type requirements |
Return type |
Evaluation |
operator value_type () const |
|
value_type |
Expression semantics
Semantics of an expression is defined only where it differs
from, or is not defined in Default Constructible.
Name |
Expression |
Precondition |
Semantics |
Postcondition |
Evaluation |
operator value_type () const |
|
Evaluates 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.
Name |
Expression |
Type requirements |
Return type |
Beginning of range |
v.begin () |
|
const_iterator |
v.begin () |
v is mutable. |
iterator |
End of range |
v.end () |
|
const_iterator |
v.end () |
v is mutable. |
iterator |
Size |
v.size () |
|
size_type |
Swap |
v1.swap (v2) |
v1 and v2 are mutable. |
void |
Beginning of reverse range |
v.rbegin () |
|
const_reverse_iterator |
v.rbegin () |
v is mutable. |
reverse_iterator |
End of reverse range |
v.rend () |
|
const_reverse_iterator |
v.rend () |
v is mutable. |
reverse_iterator |
Element access |
v (i) |
i is convertible to size_type . |
Convertible to value_type . |
Assignment |
v2 = v1 |
v2 is mutable and v1 is convertible
to V . |
V & |
v2.assign (v1) |
v2 is mutable and v1 is convertible
to V . |
V & |
Computed assignment |
v2 += v1 |
v2 is mutable and v1 is convertible
to V . |
V & |
v2.plus_assign (v1) |
v2 is mutable and v1 is convertible
to V . |
V & |
v2 -= v1 |
v2 is mutable and v1 is convertible
to V . |
V & |
v2.minus_assign (v1) |
v2 is mutable and v1 is convertible
to V . |
V & |
v *= t |
v 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.
Name |
Expression |
Precondition |
Semantics |
Postcondition |
Beginning of range |
v.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 range |
v.end () |
|
Returns an iterator pointing one past the last element in the
vector expression. |
v.end () is past-the-end. |
Size |
v.size () |
|
Returns the size of the vector expression, that is, its number
of elements. |
v.size () >= 0 |
Swap |
v1.swap (v2) |
|
Equivalent to swap (v1, v2) . |
|
Beginning of reverse range |
v.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 range |
v.rend () |
|
Equivalent to reverse_iterator (v.begin ()) . |
v.rend () is past-the-end. |
Element access |
v (i) |
0 <= i < v.size () |
Returns the i -th element of the vector
expression. |
|
Assignment |
v2 = v1 |
v1.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 assignment |
v2 += v1 |
v1.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 -= v1 |
v1.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 *= t |
|
Multiplies 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
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.
|
Reference type |
reference |
The return type when accessing an element of a matrix expression.
Convertable to avalue_type .
|
Const reference type |
const_reference |
The return type when accessing an element of a constant matrix expression.
Convertable to avalue_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. |
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. |
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. |
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.
Name |
Expression |
Type requirements |
Return type |
Beginning of range |
m.begin1 () |
|
const_iterator1 |
m.begin2 () |
|
const_iterator2 |
m.begin1 () |
m is mutable. |
iterator1 |
m.begin2 () |
m is mutable. |
iterator2 |
End of range |
m.end1 () |
|
const_iterator1 |
m.end2 () |
|
const_iterator2 |
m.end1 () |
m is mutable. |
iterator1 |
m.end2 () |
m is mutable. |
iterator2 |
Size |
m.size1 () |
|
size_type |
m.size2 () |
|
size_type |
Swap |
m1.swap (m2) |
m1 and m2 are mutable. |
void |
Beginning of reverse range |
m.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 range |
m.rend1 () |
|
const_reverse_iterator1 |
m.rend2 () |
|
const_reverse_iterator2 |
m.rend1 () |
m is mutable. |
reverse_iterator1 |
m.rend2 () |
m is mutable. |
reverse_iterator2 |
Element access |
m (i, j) |
i and j are convertible to
size_type . |
Convertible to value_type . |
Assignment |
m2 = m1 |
m2 is mutable and m1 is convertible
to M . |
M & |
m2.assign (m1) |
m2 is mutable and m1 is convertible
to M . |
M & |
Computed assignment |
m2 += m1 |
m2 is mutable and m1 is convertible
to M . |
M & |
m2.plus_assign (m1) |
m2 is mutable and m1 is convertible
to M . |
M & |
m2 -= m1 |
m2 is mutable and m1 is convertible
to M . |
M & |
m2.minus_assign (m1) |
m2 is mutable and m1 is convertible
to M . |
M & |
m *= t |
m 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.
Name |
Expression |
Precondition |
Semantics |
Postcondition |
Beginning of range |
m.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 range |
m.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. |
Size |
m.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 |
Swap |
m1.swap (m2) |
|
Equivalent to swap (m1, m2) . |
|
Beginning of reverse range |
m.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 range |
m.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 access |
m (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. |
|
Assignment |
m2 = m1 |
m1.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 assignment |
m2 += m1 |
m1.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 -= m1 |
m1.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 *= t |
|
Multiplies 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
).
|