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}