Assignment policies

The assignment statement
assign(x,e);
assigns the result of the expression e to the container x. There are various conditions of assigment, some of which are discussed here.

Size

By default, we assume that the sizes of e and x are equal. An assignment policy can be created that first resizes the left hand side if the sizes do not match. Of course this is not possible for add_assign and subtract_assign.

Aliasing

It is assumed that the elemental assigment for vectors
x(i) = e(i)
is possible for any i in 0,x.size()-1 in any order. This is a no-aliasing assumption. If aliasing could be possible the result should first be stored in a temporary before assigning. There could be a policy to create this temporary.

Sparse assignments

The assignment into a sparse container can also happen in various ways. It could be a requirement that the sparse (nonzero) structure is equal for left and right-hand side, or the sparse structure of the right-hand side is inserted into the left-hand side, or the sparse structure of the left-hand side is overwritten by the structure of the right-hand side.

Assignment policy

The assigment policy is a class that indicates when the choices discussed above should apply whence assign is called. The syntax for another than the default policy is:
assign<blackend_type,assignment_policy_type>( x, e ) ;
or, when operators are used, we could have
assignment_policy( x ) = e ;