ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
cmpdif2.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id$
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
00006  */
00011 #include <fvar.hpp>
00012 #ifdef __TURBOC__
00013   #pragma hdrstop
00014 #endif
00015 
00016 #include <string.h>
00017 int save_identifier_string(const char*);
00018 void verify_identifier_string(const char*);
00019 
00020 //struct dvar_matrix_position;
00021 //struct dvector_position;
00022 long int reset_gs_stack(void);
00023 void reset_gs_stack(long int);
00024 
00025 #ifndef OPT_LIB
00026   #define CHK_ID_STRING
00027 #endif
00028 
00034 dvar_vector_position::dvar_vector_position(const dvar_vector& v)
00035 {
00036   min=v.indexmin();
00037   max=v.indexmax();
00038   va=v.get_va();
00039 }
00040 
00046 dvector_position::dvector_position(const dvector& vv)
00047 {
00048   min=vv.indexmin();
00049   max=vv.indexmax();
00050   v=vv.get_v();
00051 }
00055 dvar_vector_position::dvar_vector_position(const dvar_vector_position& dvp)
00056 {
00057   min=dvp.min;
00058   max=dvp.max;
00059   va=dvp.va;
00060 }
00064 dvector_position::dvector_position(const dvector_position& dvp)
00065 {
00066   min=dvp.min;
00067   max=dvp.max;
00068   v=dvp.v;
00069 }
00073 dvar_vector_position::dvar_vector_position(void)
00074 {
00075   min=0;
00076   max=-1;
00077   va=0;
00078 }
00082 dvector_position::dvector_position(void)
00083 {
00084   min=0;
00085   max=-1;
00086   v=0;
00087 }
00088 
00093 ivector_position::ivector_position(const ivector& iv)
00094 {
00095   min=iv.indexmin();
00096   max=iv.indexmax();
00097   v=iv.get_v();
00098 }
00102 ivector_position::ivector_position(const ivector_position& dvp)
00103 {
00104   min=dvp.min;
00105   max=dvp.max;
00106   v=dvp.v;
00107 }
00111 ivector_position::ivector_position(void)
00112 {
00113   min=0;
00114   max=-1;
00115   v=0;
00116 }
00121 double& dvar_vector_position::operator()(const int& i)
00122 {
00123   if (i<min||i>max)
00124   {
00125     cerr << "Error -- Index out of bounds in\n"
00126      "double_and_int& dvar_vector_position::operator()(const int& i)"
00127      << endl;
00128      ad_exit(1);
00129    }
00130    return va[i].x;
00131 }
00132 
00137 dvar_vector_position dvar_matrix_position::operator () (int i)
00138 {
00139   if (i<row_min||i>row_max)
00140   {
00141     cerr << "Index out of range in\n"
00142         "  dvar_vector_position dvar_matrix_position::operator () (int i)"
00143       << endl;
00144   }
00145   dvar_vector_position tmp;
00146   tmp.min=lb(i);
00147   tmp.max=ub(i);
00148   tmp.va=(double_and_int *) ptr(i);
00149   return tmp;
00150 }
00151 
00156 dvector_position dmatrix_position::operator () (int i)
00157 {
00158   if (i<row_min||i>row_max)
00159   {
00160     cerr << "Index out of range in\n"
00161         "  dvector_position dmatrix_position::operator () (int i)"
00162       << endl;
00163   }
00164   dvector_position tmp;
00165   tmp.min=lb(i);
00166   tmp.max=ub(i);
00167   tmp.v=(double *) ptr(i);
00168   return tmp;
00169 }
00170 
00175 dvar_matrix_position::dvar_matrix_position(const dvar_matrix& m,int x)
00176   : lb(m.rowmin(),m.rowmax()), ub(m.rowmin(),m.rowmax()),
00177   ptr(m.rowmin(),m.rowmax())
00178 
00179 {
00180   row_min=m.rowmin();
00181   row_max=m.rowmax();
00182   for (int i=row_min;i<=row_max;i++)
00183   {
00184     if (allocated(m(i)))
00185     {
00186       lb(i)=m(i).indexmin();
00187       ub(i)=m(i).indexmax();
00188       ptr(i)=m(i).get_va();
00189     }
00190     else
00191     {
00192       lb(i)=0;
00193       ub(i)=-1;
00194       ptr(i)=0;
00195     }
00196   }
00197 }
00198 
00203 dmatrix_position::dmatrix_position(const dmatrix& m)
00204   : lb(m.rowmin(),m.rowmax()), ub(m.rowmin(),m.rowmax()),
00205   ptr(m.rowmin(),m.rowmax())
00206 {
00207   row_min=m.rowmin();
00208   row_max=m.rowmax();
00209   for (int i=row_min;i<=row_max;i++)
00210   {
00211     lb(i)=m(i).indexmin();
00212     ub(i)=m(i).indexmax();
00213     ptr(i)=m(i).get_v();
00214   }
00215 }
00216 
00221 dvar_matrix_position::dvar_matrix_position(int min,int max)
00222   : lb(min,max), ub(min,max), ptr(min,max)
00223 {
00224   row_min=min;
00225   row_max=max;
00226   for (int i=row_min;i<=row_max;i++)
00227   {
00228     lb(i)=0;
00229     ub(i)=-1;
00230     ptr(i)=0;
00231   }
00232 }
00233 
00238 dmatrix_position::dmatrix_position(int min,int max)
00239   : lb(min,max), ub(min,max), ptr(min,max)
00240 {
00241   row_min=min;
00242   row_max=max;
00243   for (int i=row_min;i<=row_max;i++)
00244   {
00245     lb(i)=0;
00246     ub(i)=-1;
00247     ptr(i)=0;
00248   }
00249 }
00250 
00255 dvar_matrix_position::dvar_matrix_position(const dvar_matrix_position& p)
00256   : lb(p.row_min,p.row_max), ub(p.row_min,p.row_max),
00257     ptr(p.row_min,p.row_max)
00258 {
00259   row_min=p.row_min;
00260   row_max=p.row_max;
00261   lb=p.lb;
00262   ub=p.ub;
00263   ptr=p.ptr;
00264   // cout << "ptr= " << ptr ;
00265 }
00269 dmatrix_position::dmatrix_position(const dmatrix_position& p)
00270   : lb(p.row_min,p.row_max), ub(p.row_min,p.row_max),
00271     ptr(p.row_min,p.row_max)
00272 {
00273   row_min=p.row_min;
00274   row_max=p.row_max;
00275   lb=p.lb;
00276   ub=p.ub;
00277   ptr=p.ptr;
00278 }
00287 int save_identifier_string(const char* str)
00288 {
00289 #if defined(CHK_ID_STRING)
00290   //int wsize=sizeof(char);
00291   size_t length=strlen(str);
00292   gradient_structure::get_fp()->fwrite(str,length);
00293 #endif
00294   return 0;
00295 }