Colin Stearns / Mbed 2 deprecated dgps

Dependencies:   mbed

handle/dataLocation.cpp

Committer:
dylanembed123
Date:
2014-04-03
Revision:
5:eef5ea6a9916
Parent:
4:c75d5e5e6bfc
Child:
6:f0248eb6714d

File content as of revision 5:eef5ea6a9916:



DataLocation* LocHolder::locs=NULL;
DataLocation* LocHolder::targ=NULL;
DataLocation* LocHolder::base=NULL;

unsigned int LocHolder::headLocs=0;
unsigned int LocHolder::headTarg=0;
unsigned int LocHolder::headBase=0;

unsigned int LocHolder::sizeLocs=0;
unsigned int LocHolder::sizeTarg=0;
unsigned int LocHolder::sizeBase=0;

DataLocation* LocHolder::get(LHType type){
    if(type==LHType_locs){
        if(locs==NULL)locs=new DataLocation[MAXNUMLOCS];
        return locs;
    }else if(type==LHType_targ){
        if(targ==NULL)targ=new DataLocation[MAXNUMLOCS];
        return targ;
    }else if(type==LHType_base){
        if(base==NULL)base=new DataLocation[MAXNUMLOCS];
        return base;
    }
}

unsigned int LocHolder::getRealIndex(int index,int offset=0){
    return (index+offset)%MAXNUMLOCS;
}

DataLocation& LocHolder::getC(LHType type,int offset=0){
    return get(type)[getRealIndex(headLocs,offset)];
}

unsigned int& getI(LHType type,LHIType indexType=LHIType_head){
    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;}    
    }
}

void inc(LHType type,int amount=1){
    unsigned int& index=getI(type);
    index=(index+amount)%getI(type,LHIType_size);
    getI(type)=index;
}