intermediate: prepare for dynamic boat data
This commit is contained in:
parent
a9e1357c7f
commit
3ef74581de
|
@ -10,6 +10,16 @@ GwBoatData::~GwBoatData(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T> GwBoatItem<T> *GwBoatData::getOrCreate(T dummy, String name, String format,
|
||||||
|
unsigned long invalidTime)
|
||||||
|
{
|
||||||
|
for (auto it=values.begin();it != values.end();it++){
|
||||||
|
if ((*it)->getName() == name){
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new GwBoatItem<T>(name,format,invalidTime,&values);
|
||||||
|
}
|
||||||
String GwBoatData::toJson() const {
|
String GwBoatData::toJson() const {
|
||||||
unsigned long minTime=millis();
|
unsigned long minTime=millis();
|
||||||
GwBoatItemBase::GwBoatItemMap::const_iterator it;
|
GwBoatItemBase::GwBoatItemMap::const_iterator it;
|
||||||
|
|
|
@ -55,6 +55,7 @@ class GwBoatItemBase{
|
||||||
virtual size_t getJsonSize(){return JSON_OBJECT_SIZE(15);}
|
virtual size_t getJsonSize(){return JSON_OBJECT_SIZE(15);}
|
||||||
virtual int getLastSource()=0;
|
virtual int getLastSource()=0;
|
||||||
virtual void refresh(unsigned long ts=0){uls(ts);}
|
virtual void refresh(unsigned long ts=0){uls(ts);}
|
||||||
|
String getName(){return name;}
|
||||||
};
|
};
|
||||||
class GwBoatData;
|
class GwBoatData;
|
||||||
template<class T> class GwBoatItem : public GwBoatItemBase{
|
template<class T> class GwBoatItem : public GwBoatItemBase{
|
||||||
|
@ -253,8 +254,43 @@ class GwBoatData{
|
||||||
public:
|
public:
|
||||||
GwBoatData(GwLog *logger);
|
GwBoatData(GwLog *logger);
|
||||||
~GwBoatData();
|
~GwBoatData();
|
||||||
|
template<class T> GwBoatItem<T> *getOrCreate(T dummy,String name,String format,
|
||||||
|
unsigned long invalidTime=GwBoatItemBase::INVALID_TIME);
|
||||||
String toJson() const;
|
String toJson() const;
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* class for lazy creation of a boat item
|
||||||
|
* once we have someone that knows the name for it
|
||||||
|
* and providing fast access without searching all the time trough the map
|
||||||
|
* xdr mappings implement such a provider
|
||||||
|
*/
|
||||||
|
class GwBoatItemNameProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual String getBoatItemName() = 0;
|
||||||
|
virtual String getBoatItemFormat() = 0;
|
||||||
|
virtual ~GwBoatItemNameProvider() {}
|
||||||
|
};
|
||||||
|
template<class T> class GwBoatItemHolder{
|
||||||
|
private:
|
||||||
|
GwBoatItem<T> *item=NULL;
|
||||||
|
GwBoatData *data;
|
||||||
|
unsigned long invalidTime=GwBoatItemBase::INVALID_TIME;
|
||||||
|
public:
|
||||||
|
GwBoatItemHolder(GwBoatData *data,unsigned long invalidTime=GwBoatItemBase::INVALID_TIME){
|
||||||
|
this->data=data;
|
||||||
|
this->invalidTime=invalidTime;
|
||||||
|
}
|
||||||
|
GwBoatItem<T> *getItem(GwBoatItemNameProvider *provider){
|
||||||
|
if (item) return item;
|
||||||
|
T dummy;
|
||||||
|
item=data->getOrCreate(dummy,
|
||||||
|
provider->getBoatItemName() ,
|
||||||
|
provider->getBoatItemFormat(),
|
||||||
|
invalidTime);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
GwBoatItem<T> *getItem(){return item;}
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -2,6 +2,7 @@
|
||||||
#define _GWXDRMAPPINGS_H
|
#define _GWXDRMAPPINGS_H
|
||||||
#include "GwLog.h"
|
#include "GwLog.h"
|
||||||
#include "GWConfig.h"
|
#include "GWConfig.h"
|
||||||
|
#include "GwBoatData.h"
|
||||||
#include <WString.h>
|
#include <WString.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@ -141,7 +142,7 @@ class GwXDRMapping{
|
||||||
typedef std::map<String,MappingList> N138Map;
|
typedef std::map<String,MappingList> N138Map;
|
||||||
typedef std::map<unsigned long,MappingList> N2KMap;
|
typedef std::map<unsigned long,MappingList> N2KMap;
|
||||||
};
|
};
|
||||||
class GwXDRFoundMapping{
|
class GwXDRFoundMapping : public GwBoatItemNameProvider{
|
||||||
public:
|
public:
|
||||||
GwXDRMappingDef *definition=NULL;
|
GwXDRMappingDef *definition=NULL;
|
||||||
GwXDRType *type=NULL;
|
GwXDRType *type=NULL;
|
||||||
|
@ -163,6 +164,14 @@ class GwXDRFoundMapping{
|
||||||
return definition->getTransducerName(instanceId);
|
return definition->getTransducerName(instanceId);
|
||||||
}
|
}
|
||||||
String buildXdrEntry(double value);
|
String buildXdrEntry(double value);
|
||||||
|
//boat Data info
|
||||||
|
virtual String getBoatItemName(){
|
||||||
|
return getTransducerName();
|
||||||
|
};
|
||||||
|
virtual String getBoatItemFormat(){
|
||||||
|
return "formatXdr"+type->xdrunit; //TODO: use the type def for the correct format
|
||||||
|
};
|
||||||
|
virtual ~GwXDRFoundMapping(){}
|
||||||
};
|
};
|
||||||
|
|
||||||
//the class GwXDRMappings is not intended to be deleted
|
//the class GwXDRMappings is not intended to be deleted
|
||||||
|
|
Loading…
Reference in New Issue