ADMB Documentation  11.1x.2711
 All Classes Files Functions Variables Typedefs Friends Defines
multiindex.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: multiindex.cpp 2531 2014-10-30 21:22:39Z johnoel $
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
00006  */
00011 #include <fvar.hpp>
00012 
00017   multi_index::multi_index(int min,int max,int dim) :
00018     mind(min),maxd(max),depth(min), index(1, dim)
00019   {
00020     index=min;
00021   }
00022   void multi_index::operator ++ (void)
00023   {
00024     int imin=index.indexmin();
00025     int imax=index.indexmax();
00026     index(imin)++;
00027     int tmpdepth=1;
00028     for (int i=imin;i<=imax;i++)
00029     {
00030       if (index(i)>maxd)
00031       {
00032         if (i<imax)
00033         {
00034           index(i+1)++;
00035         }
00036         index(i)=mind;
00037         tmpdepth=i+1;
00038       }
00039       else
00040       {
00041         break;
00042       }
00043     }
00044     if (tmpdepth>depth)
00045       depth =tmpdepth;
00046   }
00047   int multi_index::get_offset(void)
00048   {
00049     int imin=index.indexmin();
00050     int imax=index.indexmax();
00051     int offset=index(imin)-mind;
00052     int mx=min(depth,imax);
00053     int sz=maxd-mind+1;
00054     for (int i=imin+1;i<=mx;i++)
00055     {
00056       offset+=int(pow(double(sz),i-imin))*(index(i)-mind);
00057     }
00058     return offset;
00059   }
00060 
00065   void multi_index::initialize(void)
00066   {
00067     index=mind;
00068     depth=mind;
00069   }