00001 # ifndef CPPAD_DECLARE_INCLUDED
00002 # define CPPAD_DECLARE_INCLUDED
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 namespace CppAD {
00016         
00017         template <class Base> class AD;
00018         template <class Base> class ADFun;
00019         template <class Base> class ADTape;
00020         template <class Base> class VecAD;
00021         template <class Base> class TapeRec;
00022         template <class Base> class VecAD_reference;
00023         template <class Base> class ADDiscrete;
00024 
00025         
00026         template <class Base> bool Parameter         (const VecAD<Base> &u);
00027         template <class Base> bool Variable          (const VecAD<Base> &u);
00028         
00029         
00030         template <class Base> int  Integer           (const AD<Base> &u);
00031         template <class Base> bool Parameter         (const AD<Base> &u);
00032         template <class Base> bool Variable          (const AD<Base> &u);
00033         template <class Base> bool IdenticalZero     (const AD<Base> &u);
00034         template <class Base> bool IdenticalOne      (const AD<Base> &u);
00035         template <class Base> bool IdenticalPar      (const AD<Base> &u);
00036         template <class Base> bool LessThanZero      (const AD<Base> &u);
00037         template <class Base> bool LessThanOrZero    (const AD<Base> &u);
00038         template <class Base> bool GreaterThanZero   (const AD<Base> &u);
00039         template <class Base> bool GreaterThanOrZero (const AD<Base> &u);
00040         template <class Base> AD<Base> Var2Par       (const AD<Base> &u);
00041 
00042         
00043         template <class Base> bool NearEqual(
00044         const AD<Base> &x, const AD<Base> &y, const Base &r, const Base &a);
00045 
00046         template <class Base> bool NearEqual(
00047         const Base &x, const AD<Base> &y, const Base &r, const Base &a);
00048 
00049         template <class Base> bool NearEqual(
00050         const AD<Base> &x, const Base &y, const Base &r, const Base &a);
00051         
00052         
00053         enum CompareOp 
00054         {CompareLt, CompareLe, CompareEq, CompareGe, CompareGt, CompareNe};
00055 
00056         template <class Base> AD<Base> CondExpOp (
00057                 enum CompareOp         cop ,
00058                 const AD<Base>       &left , 
00059                 const AD<Base>      &right , 
00060                 const AD<Base>   &trueCase , 
00061                 const AD<Base>  &falseCase 
00062         );
00063         
00064         
00065         template <class Base> 
00066         bool IdenticalEqualPar (const AD<Base> &u, const AD<Base> &v);
00067         
00068         
00069         template <class Base> 
00070         bool EqualOpSeq (const AD<Base> &u, const AD<Base> &v);
00071         
00072         
00073         template <class Base>
00074         void PrintFor(const char *text, const AD<Base> &x);
00075 
00076         
00077         template <class Base> Base Value(const AD<Base> &x);
00078 
00079         
00080         template <class Base> AD<Base> pow
00081                 (const AD<Base> &x, const AD<Base> &y);
00082 
00083         
00084         template <class Base> std::ostream&
00085         operator << (std::ostream &os, const AD<Base> &x);
00086         template <class Base> std::ostream&
00087         operator << (std::ostream &os, const VecAD_reference<Base> &e);
00088         template <class Base> std::ostream&
00089         operator << (std::ostream &os, const VecAD<Base> &vec);
00090 }
00091 
00092 # endif