Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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