Colin Stearns
/
qcControl
QC Control software
Fork of dgps by
Diff: handle/dataLocation.cpp
- Revision:
- 9:da906eeac51e
- Parent:
- 7:c75d5e5e6bfc
- Child:
- 15:e3e03a9df89e
--- a/handle/dataLocation.cpp Tue Apr 01 17:58:35 2014 +0000 +++ b/handle/dataLocation.cpp Thu Apr 03 17:15:29 2014 +0000 @@ -1,34 +1,43 @@ - - -DataLocation* LocHolder::locs=NULL; -DataLocation* LocHolder::targ=NULL; -DataLocation* LocHolder::base=NULL; +#include "dataLocation.h" -DataLocation* LocHolder::getLocs(){ - if(locs==NULL)locs=new DataLocation[MAXNUMLOCS]; - return locs; -} - -DataLocation* LocHolder::getTarg(){ - if(targ==NULL)targ=new DataLocation[MAXNUMLOCS]; - return targ; -} - -DataLocation* LocHolder::getBase(){ - if(base==NULL)base=new DataLocation[MAXNUMLOCS]; +DataLocation* LocHolder::get(LHType type){ + if(type==LHType_locs){ + return locs; + }else if(type==LHType_targ){ + return targ; + }else if(type==LHType_base){ + return base; + } return base; } -unsigned int LocHolder::getRealIndex(int index,int offset=0){ - return (index+offset)%MAXNUMLOCS; +unsigned int LocHolder::getRealIndex(LHType type,int index,int offset,bool useSize){ + return (index+offset)%(useSize?getI(type,LHIType_size):MAXNUMLOCS); +} + +DataLocation& LocHolder::getC(LHType type,int offset){ + return get(type)[getRealIndex(type,offset)]; } -DataLocation& LocHolder::getCurrentLocs(int offset=0){ - return getLocs()[getRealIndex(headLocs,offset)]; +unsigned int& LocHolder::getI(LHType type,LHIType indexType){ + if(indexType==LHIType_head){ + // Grab proper header + if(type==LHType_locs){return headLocs;}else if(type==LHType_targ){return headTarg;}else if(type==LHType_base){return headBase;} + }else if(indexType==LHIType_size){ + // Grab proper size + if(type==LHType_locs){return sizeLocs;}else if(type==LHType_targ){return sizeTarg;}else if(type==LHType_base){return sizeBase;} + } + return headLocs; } -DataLocation& LocHolder::getCurrentTarg(int offset=0){ - return getTarg()[getRealIndex(headTarg,offset)]; + +void LocHolder::inc(LHType type,int amount,bool abs){ + unsigned int& index=getI(type); + index=getRealIndex(type,(abs?0:index),amount);//((abs?0:index)+amount)%getI(type,LHIType_size); + getI(type)=index; } -DataLocation& LocHolder::getCurrentBase(int offset=0){ - return getBase()[getRealIndex(headBase,offset)]; -} + +void LocHolder::add(LHType type,DataLocation newLoc){ + getI(type)=getI(type,LHIType_size); + getI(type,LHIType_size)++; + getC(type)=newLoc; +} \ No newline at end of file