QC Control software

Dependencies:   mbed

Fork of dgps by Colin Stearns

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