map() with nested containers - part 1

The arbb::map() function permits you to invoke a function written in terms of scalars across all elements of one or more dense containers. However, in the current ArBB beta, there are the following restrictions which are not set in stone:

     - The return type of the function must be void.

     - The function must have 35 or fewer parameters.

     - Parameters to the function must be of Intel ArBB types, user-defined ArBB types, or (possibly const) references of such    

We would like your feedback on exactly how you would like map with nested to work, because those restrictions translate to the following realities of how arbb::map() imposes the following constraints on the function passed in, the context in which arbb::map() is invoked, and the arguments passed to objects returned by arbb::map():

     - [NEW docs info] Nested containers cannot be passed as varying arguments

     - [EDITED docs info] Arguments to container (see Dense Containers) parameters must match the type of the parameter 

     - The function must not contain any arbb::map() or arbb::call() invocations.

     - The function must not declare any local containers.

     - arbb::map() must be called from within a function passed to arbb::call() or arbb::capture().

     - At least one non-container parameter of the function must be a non-const reference parameter.

     - Arguments to scalar or user-defined parameters must match the type of the parameter exactly, or be containers of that 
       type (with references and const qualifiers stripped).

     - At least one argument must be a container passed to a non-container reference parameter.

     - Any container arguments passed to non-container parameters must match one another in dimensionality and size.

     - Reading from or writing to global ArBB variables from inside a function passed to arbb::map() is not permitted.

There are also the following temporary limitations with nested:

     - Nested containers cannot be passed as fixed arguments

     - One cannot use ArBB operators taking whole containers (fixed arguments)

We will present the details of a workaround in a subsequent Knowledge Base article.

For more complete information about compiler optimizations, see our Optimization Notice.