lines 8-101 of file: include/cppad/core/atomic/two/ctor.hpp
{xrst_begin atomic_two_ctor app}
Atomic Function Constructor
###########################
Syntax
******
| *atomic_user afun* ( *ctor_arg_list* )
| ``atomic_base`` < *Base* >( *name* , *sparsity* )
atomic_user
***********
ctor_arg_list
=============
Is a list of arguments for the *atomic_user* constructor.
afun
====
The object *afun* must stay in scope for as long
as the corresponding atomic function is used.
This includes use by any :ref:`ADFun\` that
has this *atomic_user* operation in its
:ref:`operation sequence` .
Implementation
==============
The user defined *atomic_user* class is a publicly derived class of
``atomic_base`` < *Base* > .
It should be declared as follows:
| |tab| ``class`` *atomic_user* : ``public CppAD::atomic_base<`` *Base* > {
| |tab| ``public:``
| |tab| |tab| *atomic_user* ( *ctor_arg_list* ) : ``atomic_base`` < *Base* >( *name* , *sparsity* )
| |tab| ...
| |tab| };
where ...
denotes the rest of the implementation of the derived class.
This includes completing the constructor and
all the virtual functions that have their
``atomic_base`` implementations replaced by
*atomic_user* implementations.
atomic_base
***********
Restrictions
============
The ``atomic_base`` constructor and destructor cannot be called in
:ref:`parallel` mode.
Base
====
The template parameter determines the
*Base* type for this ``AD`` < *Base* > atomic operation.
name
====
This ``atomic_base`` constructor argument has the following prototype
``const std::string&`` *name*
It is the name for this atomic function and is used for error reporting.
The suggested value for *name* is *afun* or *atomic_user* ,
i.e., the name of the corresponding atomic object or class.
sparsity
========
This ``atomic_base`` constructor argument has prototype
``atomic_base`` < *Base* >:: ``option_enum`` *sparsity*
The current *sparsity* for an ``atomic_base`` object
determines which type of sparsity patterns it uses
and its value is one of the following:
.. list-table::
:widths: auto
* - *sparsity*
- sparsity patterns
* - ``atomic_base`` < *Base* >:: ``pack_sparsity_enum``
- :ref:`CppAD_vector@vectorBool`
* - ``atomic_base`` < *Base* >:: ``bool_sparsity_enum``
- :ref:`vector` ````
* - ``atomic_base`` < *Base* >:: ``set_sparsity_enum``
- :ref:`vector` `` >``
There is a default value for *sparsity* if it is not
included in the constructor (which may be either the bool or set option).
{xrst_end atomic_two_ctor}