VertTimeList.cpp
Go to the documentation of this file.
00001 /***
00002  basic structure for vertex in frame, used for contructing spatial-temporal constraints.
00003  ***/
00004 #include "tensor_field_nav_core/VertTimeList.h"
00005 VertTimeList::VertTimeList(int nverts, int initsize)
00006 {
00007     if(initsize == 0)
00008     {
00009         vertsTime  = NULL;
00010         nvertsTime = curMaxNum    = 0;
00011         total_notconstraint_verts = 0;
00012         nvertsPerFrame = nverts;
00013         return;
00014     }
00015 
00016     vertsTime = (OneVertAtTime**)malloc(sizeof(OneVertAtTime*)*initsize);
00017     if(vertsTime == NULL) exit(-1);
00018 
00019     int i;
00020     for(i=0; i<initsize; i++)
00021         vertsTime[i]=NULL;
00022 
00023     nvertsTime = 0;
00024     curMaxNum  = initsize;
00025     total_notconstraint_verts = 0;
00026     nvertsPerFrame = nverts;
00027 }
00028 
00029 /*   destructor   */
00030 VertTimeList::~VertTimeList()
00031 {
00032     if(vertsTime == NULL)
00033         return;
00034 
00035     int i;
00036     for(i=0; i<curMaxNum; i++)
00037     {
00038         if(vertsTime[i]== NULL)
00039             continue;
00040 
00041         free(vertsTime[i]);
00042         vertsTime[i]=NULL;
00043     }
00044 
00045     free(vertsTime);
00046     vertsTime = NULL;
00047 }
00048 
00049 /*  list operations  */
00050 void VertTimeList::add_new(int time_step, int which_vert, bool isConstraint)
00051 {
00052     /*  allocate space for new element  */
00053     if(isFull())
00054     {
00055         if(!extend())
00056             exit(-1);
00057     }
00058 
00059     vertsTime[nvertsTime]=(OneVertAtTime*)malloc(sizeof(OneVertAtTime));
00060     vertsTime[nvertsTime]->time_step    = time_step;
00061     vertsTime[nvertsTime]->which_vert   = which_vert;
00062     vertsTime[nvertsTime]->isConstraint = isConstraint;
00063     vertsTime[nvertsTime]->variableID   = -1;
00064 
00065     nvertsTime++;
00066 }
00067 
00068 void VertTimeList::add_new(OneVertAtTime *oneVert)
00069 {
00070     /*  allocate space for new element  */
00071     if(isFull())
00072     {
00073         if(!extend())
00074             exit(-1);
00075     }
00076 
00077     vertsTime[nvertsTime]=oneVert;
00078     nvertsTime++;
00079 }
00080 
00081 bool VertTimeList::isFull()
00082 {
00083     if(nvertsTime >= curMaxNum) return true;
00084     return false;
00085 }
00086 
00087 bool VertTimeList::extend(int step)
00088 {
00089     OneVertAtTime **temp=vertsTime;
00090 
00091     vertsTime=(OneVertAtTime**)malloc(sizeof(OneVertAtTime*)*(curMaxNum+step));
00092 
00093     if(vertsTime == NULL) return false;
00094 
00095     int i;
00096     for(i=0; i<curMaxNum; i++)
00097         vertsTime[i]=temp[i];
00098 
00099     for(i=curMaxNum; i<curMaxNum+step; i++)
00100         vertsTime[i]=NULL;
00101 
00102     free(temp);
00103     curMaxNum += step;
00104 
00105     return true;
00106 }
00107 
00108 void VertTimeList::set_constraint_at_vert(int time_step, int which_vert)
00109 {
00110     vertsTime[time_step*nvertsPerFrame+which_vert]->isConstraint = true;
00111 }
00112 
00113 void VertTimeList::reset_all_constraints()
00114 {
00115     int i;
00116     for(i=0; i<nvertsTime; i++)
00117         vertsTime[i]->isConstraint = false;
00118 }
00119 
00120 /*  return the slice index given the index of a variable   */
00121 int VertTimeList::get_sliceID_given_varID(int variableID)
00122 {
00123     int i;
00124     for(i=0; i<nvertsTime; i++)
00125     {
00126         if(vertsTime[i]->variableID == variableID)
00127             return vertsTime[i]->time_step;
00128     }
00129 
00130     return -1;
00131 }


tensor_field_nav_core
Author(s): Lintao Zheng, Kai Xu
autogenerated on Thu Jun 6 2019 19:50:56