# ifndef CPPAD_INTEGER_INCLUDED # define CPPAD_INTEGER_INCLUDED /* -------------------------------------------------------------------------- CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-07 Bradley M. Bell CppAD is distributed under multiple licenses. This distribution is under the terms of the Common Public License Version 1.0. A copy of this license is included in the COPYING file of this distribution. Please visit http://www.coin-or.org/CppAD/ for information on other licenses. -------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------------ $begin Integer$$spell std VecAD CppAD namespace inline const bool$$$index Integer$$index AD, convert to integer$$ $index convert, AD to integer$$section Convert From AD to Integer$$$head Syntax$$syntax%%i% = Integer(%x%)%$$ $head Purpose$$Converts from an AD type to the corresponding integer value. head i$$ The result$italic i$$has prototype syntax% int %i% %$$ $head x$$subhead Real Types$$ If the argument$italic x$$has either of the following prototypes: syntax% const float %% &%x% const double %% &%x% %$$ the fractional part is dropped to form the integer value. For example, if $italic x$$is 1.5, italic i$$ is 1. In general, if$latex x \geq 0$$, italic i$$ is the greatest integer less than or equal $italic x$$. If latex x \leq 0$$,$italic i$$is the smallest integer greater than or equal italic x$$. $subhead Complex Types$$If the argument italic x$$ has either of the following prototypes:$syntax% const std::complex %% &%x% const std::complex %% &%x% %$$The result italic i$$ is given by $syntax% %i% = Integer(%x%.real()) %$$subhead AD Types$$ If the argument$italic x$$has either of the following prototypes: syntax% const AD<%Base%> &%x% const VecAD<%Base%>::reference &%x% %$$ $italic Base$$must support the code Integer$$ function and the conversion has the same meaning as for$italic Base$$. head Operation Sequence$$ The result of this operation is not an $xref/glossary/AD of Base/AD of Base/$$object. Thus it will not be recorded as part of an AD of italic Base$$$xref/glossary/Operation/Sequence/operation sequence/1/$$. head Example$$ $children% example/integer.cpp %$$The file xref/Integer.cpp/$$ contains an example and test of this operation.$end ------------------------------------------------------------------------------ */ namespace CppAD { inline int Integer(const float &x) { return static_cast(x); } inline int Integer(const double &x) { return static_cast(x); } template inline int Integer(const AD &x) { return Integer(x.value_); } template inline int Integer(const VecAD_reference &x) { return Integer( x.ADBase() ); } } # endif