added DataField::clone()

This commit is contained in:
john30
2015-11-08 22:15:10 +01:00
parent 7f8dcff0f0
commit 2fae7ac076
2 changed files with 61 additions and 0 deletions
+31
View File
@@ -566,6 +566,10 @@ result_t SingleDataField::write(istringstream& input,
return writeSymbols(input, offset, data); return writeSymbols(input, offset, data);
} }
StringDataField* StringDataField::clone()
{
return new StringDataField(*this);
}
result_t StringDataField::derive(string name, string comment, result_t StringDataField::derive(string name, string comment,
string unit, const PartType partType, string unit, const PartType partType,
@@ -979,6 +983,11 @@ NumberDataField::NumberDataField(const string name, const string comment,
break; break;
} }
NumberDataField* NumberDataField::clone()
{
return new NumberDataField(*this);
}
result_t NumberDataField::derive(string name, string comment, result_t NumberDataField::derive(string name, string comment,
string unit, const PartType partType, string unit, const PartType partType,
int divisor, map<unsigned int, string> values, int divisor, map<unsigned int, string> values,
@@ -1159,6 +1168,11 @@ result_t NumberDataField::writeSymbols(istringstream& input,
} }
ValueListDataField* ValueListDataField::clone()
{
return new ValueListDataField(*this);
}
result_t ValueListDataField::derive(string name, string comment, result_t ValueListDataField::derive(string name, string comment,
string unit, const PartType partType, string unit, const PartType partType,
int divisor, map<unsigned int, string> values, int divisor, map<unsigned int, string> values,
@@ -1305,6 +1319,15 @@ DataFieldSet::~DataFieldSet()
} }
} }
DataFieldSet* DataFieldSet::clone()
{
vector<SingleDataField*> fields;
for (vector<SingleDataField*>::iterator it = m_fields.begin(); it < m_fields.end(); it++) {
fields.push_back((*it)->clone());
}
return new DataFieldSet(m_name, m_comment, fields);
}
unsigned char DataFieldSet::getLength(PartType partType) unsigned char DataFieldSet::getLength(PartType partType)
{ {
unsigned char length = 0; unsigned char length = 0;
@@ -1493,6 +1516,14 @@ result_t DataFieldSet::write(istringstream& input,
} }
DataFieldTemplates::DataFieldTemplates(DataFieldTemplates& other)
: FileReader<void*>::FileReader(false)
{
for (map<string, DataField*>::iterator it = other.m_fieldsByName.begin(); it != other.m_fieldsByName.end(); it++) {
m_fieldsByName[it->first] = it->second->clone();
}
}
void DataFieldTemplates::clear() void DataFieldTemplates::clear()
{ {
for (map<string, DataField*>::iterator it = m_fieldsByName.begin(); it != m_fieldsByName.end(); it++) { for (map<string, DataField*>::iterator it = m_fieldsByName.begin(); it != m_fieldsByName.end(); it++) {
+30
View File
@@ -156,6 +156,12 @@ public:
*/ */
virtual ~DataField() {} virtual ~DataField() {}
/**
* Clone this instance.
* @return a clone of this instance.
*/
virtual DataField* clone() = 0;
/** /**
* Factory method for creating new instances. * Factory method for creating new instances.
* @param it the iterator to traverse for the definition parts. * @param it the iterator to traverse for the definition parts.
@@ -318,6 +324,9 @@ public:
*/ */
virtual ~SingleDataField() {} virtual ~SingleDataField() {}
// @copydoc
virtual SingleDataField* clone() = 0;
/** /**
* Factory method for creating a new @a SingleDataField instance derived from a base type. * Factory method for creating a new @a SingleDataField instance derived from a base type.
* @param typeNameStr the base type name string. * @param typeNameStr the base type name string.
@@ -460,6 +469,9 @@ public:
*/ */
virtual ~StringDataField() {} virtual ~StringDataField() {}
// @copydoc
virtual StringDataField* clone();
// @copydoc // @copydoc
virtual result_t derive(string name, string comment, virtual result_t derive(string name, string comment,
string unit, const PartType partType, string unit, const PartType partType,
@@ -516,6 +528,9 @@ public:
*/ */
virtual ~NumericDataField() {} virtual ~NumericDataField() {}
// @copydoc
virtual NumericDataField* clone() = 0;
// @copydoc // @copydoc
virtual bool hasFullByteOffset(bool after); virtual bool hasFullByteOffset(bool after);
@@ -576,6 +591,9 @@ public:
*/ */
virtual ~NumberDataField() {} virtual ~NumberDataField() {}
// @copydoc
virtual NumberDataField* clone();
// @copydoc // @copydoc
virtual result_t derive(string name, string comment, virtual result_t derive(string name, string comment,
string unit, const PartType partType, string unit, const PartType partType,
@@ -636,6 +654,9 @@ public:
*/ */
virtual ~ValueListDataField() {} virtual ~ValueListDataField() {}
// @copydoc
virtual ValueListDataField* clone();
// @copydoc // @copydoc
virtual result_t derive(string name, string comment, virtual result_t derive(string name, string comment,
string unit, const PartType partType, int divisor, string unit, const PartType partType, int divisor,
@@ -697,6 +718,9 @@ public:
*/ */
virtual ~DataFieldSet(); virtual ~DataFieldSet();
// @copydoc
virtual DataFieldSet* clone();
// @copydoc // @copydoc
virtual unsigned char getLength(PartType partType); virtual unsigned char getLength(PartType partType);
@@ -771,6 +795,12 @@ public:
*/ */
DataFieldTemplates() : FileReader<void*>::FileReader(false) {} DataFieldTemplates() : FileReader<void*>::FileReader(false) {}
/**
* Constructs a new copied instance.
* @param other the @a DataFieldTemplates to copy from.
*/
DataFieldTemplates(DataFieldTemplates& other);
/** /**
* Destructor. * Destructor.
*/ */