cleanup boatData handling
This commit is contained in:
parent
68769368f2
commit
e1e3928062
|
@ -23,7 +23,3 @@ String GwBoatData::toJson() const {
|
|||
serializeJson(json,buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
GwBoatItemBase::GwBoatItemMap * GwBoatData::getValues(){
|
||||
return &values;
|
||||
}
|
|
@ -31,17 +31,7 @@ class GwBoatItemBase{
|
|||
}
|
||||
virtual void toJsonDoc(DynamicJsonDocument *doc,String name)=0;
|
||||
};
|
||||
class GwBoatData{
|
||||
private:
|
||||
GwLog *logger;
|
||||
GwBoatItemBase::GwBoatItemMap values;
|
||||
public:
|
||||
GwBoatData(GwLog *logger);
|
||||
~GwBoatData();
|
||||
GwBoatItemBase::GwBoatItemMap * getValues();
|
||||
String toJson() const;
|
||||
friend class GwBoatItemBase;
|
||||
};
|
||||
class GwBoatData;
|
||||
template<class T> class GwBoatItem : public GwBoatItemBase{
|
||||
public:
|
||||
typedef T (*Formatter)(T);
|
||||
|
@ -64,9 +54,9 @@ template<class T> class GwBoatItem : public GwBoatItemBase{
|
|||
virtual void toJsonDoc(DynamicJsonDocument *doc,String name){
|
||||
(*doc)[name]=getData(true);
|
||||
}
|
||||
static GwBoatItem<T> *findOrCreate(GwBoatData *handler, String name,bool doCreate=true,
|
||||
private:
|
||||
static GwBoatItem<T> *findOrCreate(GwBoatItemMap *values, String name,bool doCreate=true,
|
||||
long invalidTime=GwBoatItemBase::INVALID_TIME, Formatter fmt=NULL){
|
||||
GwBoatItemMap *values=handler->getValues();
|
||||
GwBoatItemMap::iterator it;
|
||||
if ((it=values->find(name)) != values->end()){
|
||||
return (GwBoatItem<T> *)it->second;
|
||||
|
@ -76,6 +66,26 @@ template<class T> class GwBoatItem : public GwBoatItemBase{
|
|||
(*values)[name]=ni;
|
||||
return ni;
|
||||
}
|
||||
friend class GwBoatData;
|
||||
};
|
||||
|
||||
#define GWBOATDATA_IMPL_ITEM(type,name) GwBoatItem<type> *get##name##Item(String iname,bool doCreate=true, \
|
||||
long invalidTime=GwBoatItemBase::INVALID_TIME, GwBoatItem<type>::Formatter fmt=NULL){ \
|
||||
return GwBoatItem<type>::findOrCreate(&values,iname, doCreate, \
|
||||
invalidTime,fmt);\
|
||||
}
|
||||
|
||||
class GwBoatData{
|
||||
private:
|
||||
GwLog *logger;
|
||||
GwBoatItemBase::GwBoatItemMap values;
|
||||
public:
|
||||
GwBoatData(GwLog *logger);
|
||||
~GwBoatData();
|
||||
String toJson() const;
|
||||
GWBOATDATA_IMPL_ITEM(double,Double)
|
||||
GWBOATDATA_IMPL_ITEM(long,Long)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -51,12 +51,12 @@ N2kDataToNMEA0183::N2kDataToNMEA0183(GwLog * logger, GwBoatData *boatData, tNMEA
|
|||
LastWindTime=0;
|
||||
this->logger=logger;
|
||||
this->boatData=boatData;
|
||||
heading=GwBoatItem<double>::findOrCreate(boatData,F("Heading"),true,2000,&formatCourse);
|
||||
latitude=GwBoatItem<double>::findOrCreate(boatData,F("Latitude"),true,4000);
|
||||
longitude=GwBoatItem<double>::findOrCreate(boatData,F("Longitude"),true,4000);
|
||||
altitude=GwBoatItem<double>::findOrCreate(boatData,F("Altitude"),true,4000);
|
||||
cog=GwBoatItem<double>::findOrCreate(boatData,F("COG"),true,2000,&formatCourse);
|
||||
sog=GwBoatItem<double>::findOrCreate(boatData,F("SOG"),true,2000,&formatKnots);
|
||||
heading=boatData->getDoubleItem(F("Heading"),true,2000,&formatCourse);
|
||||
latitude=boatData->getDoubleItem(F("Latitude"),true,4000);
|
||||
longitude=boatData->getDoubleItem(F("Longitude"),true,4000);
|
||||
altitude=boatData->getDoubleItem(F("Altitude"),true,4000);
|
||||
cog=boatData->getDoubleItem(F("COG"),true,2000,&formatCourse);
|
||||
sog=boatData->getDoubleItem(F("SOG"),true,2000,&formatKnots);
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
|
|
Loading…
Reference in New Issue