DataTree cleanup/refactor..

This commit is contained in:
Charles J. Cliffe 2015-01-08 19:56:44 -05:00
parent cf2b11f496
commit 36ff762d3a
2 changed files with 968 additions and 1404 deletions

View File

@ -37,6 +37,7 @@ DataElement::DataElement() {
data_type = DATA_NULL;
data_val = NULL;
data_size = 0;
unit_size = 0;
}
DataElement::~DataElement() {
@ -59,75 +60,30 @@ long DataElement::getDataSize() {
return data_size;
}
//void DataElement::set(const bool &bool_in)
//{
// data_type = DATA_BOOL;
// data_init(sizeof(bool));
// memcpy(data_val,&bool_in,data_size);
//}
void DataElement::set(const char& char_in) {
data_type = DATA_CHAR;
data_init(sizeof(char));
memcpy(data_val, &char_in, data_size);
int DataElement::getUnitSize() {
return unit_size;
}
void DataElement::set(const unsigned char& uchar_in) {
data_type = DATA_UCHAR;
data_init(sizeof(unsigned char));
memcpy(data_val, &uchar_in, data_size);
#define DataElementSetNumericDef(enumtype, datatype) void DataElement::set(const datatype& val_in) { \
data_type = enumtype; \
unit_size = sizeof(char); \
data_init(unit_size); \
memcpy(data_val, &val_in, data_size); \
}
void DataElement::set(const unsigned int& uint_in) {
data_type = DATA_UINT;
data_init(sizeof(unsigned int));
memcpy(data_val, &uint_in, data_size);
}
void DataElement::set(const unsigned long & ulong_in) {
data_type = DATA_ULONG;
data_init(sizeof(unsigned long));
memcpy(data_val, &ulong_in, data_size);
}
void DataElement::set(const long long & llong_in) {
data_type = DATA_ULONG;
data_init(sizeof(long long));
memcpy(data_val, &llong_in, data_size);
}
void DataElement::set(const long double& ldouble_in) {
data_type = DATA_LONGDOUBLE;
data_init(sizeof(long double));
memcpy(data_val, &ldouble_in, data_size);
}
void DataElement::set(const int &int_in) {
data_type = DATA_INT;
data_init(sizeof(int));
memcpy(data_val, &int_in, data_size);
}
void DataElement::set(const long &long_in) {
data_type = DATA_LONG;
data_init(sizeof(long));
memcpy(data_val, &long_in, data_size);
}
void DataElement::set(const float &float_in) {
data_type = DATA_FLOAT;
data_init(sizeof(float));
memcpy(data_val, &float_in, data_size);
}
void DataElement::set(const double &double_in) {
data_type = DATA_DOUBLE;
data_init(sizeof(double));
memcpy(data_val, &double_in, data_size);
}
DataElementSetNumericDef(DATA_CHAR, char)
DataElementSetNumericDef(DATA_UCHAR, unsigned char)
DataElementSetNumericDef(DATA_INT, int)
DataElementSetNumericDef(DATA_UINT, unsigned int)
DataElementSetNumericDef(DATA_LONG, long)
DataElementSetNumericDef(DATA_ULONG, unsigned long)
DataElementSetNumericDef(DATA_LONGLONG, long long)
DataElementSetNumericDef(DATA_FLOAT, float)
DataElementSetNumericDef(DATA_DOUBLE, double)
DataElementSetNumericDef(DATA_LONGDOUBLE, long double)
void DataElement::set(const char *data_in, long size_in) {
data_type = DATA_FLOAT;
data_type = DATA_VOID;
data_init(size_in);
memcpy(data_val, data_in, data_size);
}
@ -182,312 +138,62 @@ void DataElement::set(std::set<string> &strset_in) {
set(tmp_vect);
}
void DataElement::set(vector<char>& charvect_in) {
long ptr;
char temp_char;
data_type = DATA_CHAR_VECTOR;
data_init(sizeof(char) * charvect_in.size());
vector<char>::iterator i;
ptr = 0;
for (i = charvect_in.begin(); i != charvect_in.end(); i++) {
temp_char = *i;
memcpy(data_val + ptr, &temp_char, sizeof(char));
ptr += sizeof(char);
}
#define DataElementSetNumericVectorDef(enumtype, datatype) void DataElement::set(vector<datatype>& val_in) { \
data_type = enumtype; \
unit_size = sizeof(char); \
data_init(unit_size * val_in.size()); \
memcpy(data_val, &val_in[0], data_size); \
}
void DataElement::set(vector<unsigned char>& ucharvect_in) {
long ptr;
unsigned char temp_uchar;
DataElementSetNumericVectorDef(DATA_CHAR_VECTOR, char)
DataElementSetNumericVectorDef(DATA_UCHAR_VECTOR, unsigned char)
DataElementSetNumericVectorDef(DATA_INT_VECTOR, int)
DataElementSetNumericVectorDef(DATA_UINT_VECTOR, unsigned int)
DataElementSetNumericVectorDef(DATA_LONG_VECTOR, long)
DataElementSetNumericVectorDef(DATA_ULONG_VECTOR, unsigned long)
DataElementSetNumericVectorDef(DATA_LONGLONG_VECTOR, long long)
DataElementSetNumericVectorDef(DATA_FLOAT_VECTOR, float)
DataElementSetNumericVectorDef(DATA_DOUBLE_VECTOR, double)
DataElementSetNumericVectorDef(DATA_LONGDOUBLE_VECTOR, long double)
data_type = DATA_UCHAR_VECTOR;
data_init(sizeof(unsigned char) * ucharvect_in.size());
vector<unsigned char>::iterator i;
ptr = 0;
for (i = ucharvect_in.begin(); i != ucharvect_in.end(); i++) {
temp_uchar = *i;
memcpy(data_val + ptr, &temp_uchar, sizeof(unsigned char));
ptr += sizeof(unsigned char);
}
}
void DataElement::set(vector<unsigned int>& uintvect_in) {
long ptr;
unsigned int temp_uint;
data_type = DATA_UCHAR_VECTOR;
data_init(sizeof(unsigned int) * uintvect_in.size());
vector<unsigned int>::iterator i;
ptr = 0;
for (i = uintvect_in.begin(); i != uintvect_in.end(); i++) {
temp_uint = *i;
memcpy(data_val + ptr, &temp_uint, sizeof(unsigned int));
ptr += sizeof(unsigned int);
}
}
void DataElement::set(vector<unsigned long>& ulongvect_in) {
long ptr;
unsigned long temp_ulong;
data_type = DATA_ULONG_VECTOR;
data_init(sizeof(unsigned long) * ulongvect_in.size());
vector<unsigned long>::iterator i;
ptr = 0;
for (i = ulongvect_in.begin(); i != ulongvect_in.end(); i++) {
temp_ulong = *i;
memcpy(data_val + ptr, &temp_ulong, sizeof(unsigned long));
ptr += sizeof(unsigned long);
}
}
void DataElement::set(vector<long long>& llongvect_in) {
long ptr;
long long temp_llong;
data_type = DATA_CHAR_VECTOR;
data_init(sizeof(long long) * llongvect_in.size());
vector<long long>::iterator i;
ptr = 0;
for (i = llongvect_in.begin(); i != llongvect_in.end(); i++) {
temp_llong = *i;
memcpy(data_val + ptr, &temp_llong, sizeof(long long));
ptr += sizeof(long long);
}
}
void DataElement::set(vector<long double>& ldoublevect_in) {
long ptr;
long double temp_ldouble;
data_type = DATA_CHAR_VECTOR;
data_init(sizeof(long double) * ldoublevect_in.size());
vector<long double>::iterator i;
ptr = 0;
for (i = ldoublevect_in.begin(); i != ldoublevect_in.end(); i++) {
temp_ldouble = *i;
memcpy(data_val + ptr, &temp_ldouble, sizeof(long double));
ptr += sizeof(long double);
}
}
void DataElement::set(vector<int> &intvect_in) {
long ptr;
int temp_int;
data_type = DATA_INT_VECTOR;
data_init(sizeof(int) * intvect_in.size());
vector<int>::iterator i;
ptr = 0;
for (i = intvect_in.begin(); i != intvect_in.end(); i++) {
temp_int = *i;
memcpy(data_val + ptr, &temp_int, sizeof(int));
ptr += sizeof(int);
}
}
void DataElement::set(vector<long> &longvect_in) {
long ptr;
long temp_long;
data_type = DATA_LONG_VECTOR;
data_init(sizeof(long) * longvect_in.size());
vector<long>::iterator i;
ptr = 0;
for (i = longvect_in.begin(); i != longvect_in.end(); i++) {
temp_long = *i;
memcpy(data_val + ptr, &temp_long, sizeof(long));
ptr += sizeof(long);
}
}
void DataElement::set(vector<float> &floatvect_in) {
long ptr;
float temp_float;
data_type = DATA_FLOAT_VECTOR;
data_init(sizeof(float) * floatvect_in.size());
// vector<float>::iterator i;
//
// ptr = 0;
//
// for (i = floatvect_in.begin(); i != floatvect_in.end(); i++)
// {
// temp_float = *i;
// memcpy(data_val+ptr, &temp_float, sizeof(float));
// ptr += sizeof(float);
// }
memcpy(data_val, &floatvect_in[0], sizeof(float) * floatvect_in.size());
}
void DataElement::set(vector<double> &doublevect_in) {
long ptr;
double temp_double;
data_type = DATA_DOUBLE_VECTOR;
data_init(sizeof(double) * doublevect_in.size());
vector<double>::iterator i;
ptr = 0;
for (i = doublevect_in.begin(); i != doublevect_in.end(); i++) {
temp_double = *i;
memcpy(data_val + ptr, &temp_double, sizeof(double));
ptr += sizeof(double);
}
}
#define DataElementGetNumericDef(enumtype, datatype) void DataElement::get(datatype& val_out) throw (DataTypeMismatchException) { \
#define DataElementGetNumericDef(enumtype, datatype, ...) void DataElement::get(datatype& val_out) throw (DataTypeMismatchException) { \
if (!data_type) \
return; \
int _compat[] = {__VA_ARGS__}; \
if (data_type != enumtype) { \
bool compat = false; \
for (int i = 0; i < sizeof(_compat)/sizeof(int); i++) { \
if (_compat[i] == data_type) { \
compat = true; \
break; \
} \
} \
if (!compat) { \
throw(new DataTypeMismatchException("Type mismatch, element type " #enumtype " is not compatible with a " #datatype)); \
} \
if (sizeof(datatype) < data_size) { \
std::cout << "Warning, data type mismatch requested size for '" << #datatype << "(" << sizeof(datatype) << ")' < data size '" << data_size << "'; possible loss of data."; \
} \
memset(&val_out, 0, sizeof(datatype)); \
memcpy(&val_out, data_val, (sizeof(datatype) < data_size) ? sizeof(datatype) : data_size); \
return; \
} \
memcpy(&val_out, data_val, data_size); \
}
DataElementGetNumericDef(DATA_CHAR, char)
DataElementGetNumericDef(DATA_UCHAR, unsigned char)
DataElementGetNumericDef(DATA_UINT, unsigned int)
DataElementGetNumericDef(DATA_ULONG, unsigned long)
DataElementGetNumericDef(DATA_LONGLONG, long long)
DataElementGetNumericDef(DATA_LONGDOUBLE, long double)
DataElementGetNumericDef(DATA_INT, int)
DataElementGetNumericDef(DATA_LONG, long)
DataElementGetNumericDef(DATA_FLOAT, float)
DataElementGetNumericDef(DATA_DOUBLE, double)
////void DataElement::get(char& char_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_CHAR)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&char_in, data_val, data_size);
////}
//
////void DataElement::get(unsigned char& uchar_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_UCHAR)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&uchar_in, data_val, data_size);
////}
//
////void DataElement::get(unsigned int& uint_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_UINT)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&uint_in, data_val, data_size);
////}
//
////void DataElement::get(unsigned long & ulong_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_ULONG)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&ulong_in, data_val, data_size);
////}
//
////void DataElement::get(long long & long_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_LONG)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&long_in, data_val, data_size);
////}
//
////void DataElement::get(long double& ldouble_in) throw (DataTypeMismatchException) {
////if (!data_type)
//// return;
////if (data_type != DATA_LONGDOUBLE)
//// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
////
////memcpy(&ldouble_in, data_val, data_size);
////}
//
//void DataElement::get(int &int_in) throw (DataTypeMismatchException) {
//if (!data_type)
// return;
//if (data_type != DATA_INT)
// throw(new DataTypeMismatchException("Type mismatch, not a INT"));
//
//memcpy(&int_in, data_val, data_size);
//}
//
//void DataElement::get(long &long_in) throw (DataTypeMismatchException) {
//if (!data_type)
// return;
//if (data_type != DATA_LONG)
// throw(new DataTypeMismatchException("Type mismatch, not a LONG"));
//
//memcpy(&long_in, data_val, data_size);
//}
//
//void DataElement::get(float &float_in) throw (DataTypeMismatchException) {
//if (!data_type)
// return;
//if (data_type != DATA_FLOAT)
// throw(new DataTypeMismatchException("Type mismatch, not a FLOAT"));
//
//memcpy(&float_in, data_val, data_size);
//}
//
//void DataElement::get(double &double_in) throw (DataTypeMismatchException) {
//if (!data_type)
// return;
//if (data_type != DATA_DOUBLE)
// throw(new DataTypeMismatchException("Type mismatch, not a DOUBLE"));
//
//memcpy(&double_in, data_val, data_size);
//}
DataElementGetNumericDef(DATA_CHAR, char, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_UCHAR, unsigned char, DATA_CHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_UINT, unsigned int, DATA_CHAR, DATA_UCHAR, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_ULONG, unsigned long, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_LONGLONG, long long, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGDOUBLE, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_LONGDOUBLE, long double, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_INT, DATA_LONG)
DataElementGetNumericDef(DATA_INT, int, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_LONG)
DataElementGetNumericDef(DATA_LONG, long, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT)
DataElementGetNumericDef(DATA_FLOAT, float, DATA_DOUBLE, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT,
DATA_LONG)
DataElementGetNumericDef(DATA_DOUBLE, double, DATA_FLOAT, DATA_CHAR, DATA_UCHAR, DATA_UINT, DATA_ULONG, DATA_LONGLONG, DATA_LONGDOUBLE, DATA_INT,
DATA_LONG)
void DataElement::get(char **data_in) throw (DataTypeMismatchException) {
if (data_type != DATA_VOID)
@ -545,196 +251,54 @@ for (i = tmp_vect.begin(); i != tmp_vect.end(); i++) {
}
}
void DataElement::get(vector<char>& charvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_CHAR_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
char temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(char));
charvect_in.push_back(temp_char);
ptr += sizeof(char);
}
#define DataElementGetNumericVectorDef(enumtype, datatype, ...) void DataElement::get(vector<datatype>& val_out) throw (DataTypeMismatchException) { \
if (!data_type || !unit_size) return; \
if (data_type != enumtype) { \
int _compat[] = {__VA_ARGS__}; \
bool compat = false; \
for (int i = 0; i < sizeof(_compat)/sizeof(int); i++) { \
if (_compat[i] == data_type) { \
compat = true; \
break; \
} \
} \
if (!compat) { \
throw(new DataTypeMismatchException("Type mismatch, element type is not compatible with a " #datatype)); \
} \
if (sizeof(datatype) < unit_size) { \
std::cout << "Warning, data type mismatch for vector<" #datatype ">; " #datatype " size " << sizeof(datatype) << " is less than unit size " << unit_size << "; possible loss of data."; \
} \
datatype temp_val; \
long ptr = 0; \
while (ptr < data_size) { \
temp_val = 0; \
memcpy(&temp_val, data_val + ptr, (unit_size > sizeof(datatype))?sizeof(datatype):unit_size); \
val_out.push_back(temp_val); \
ptr += unit_size; \
} \
return; \
} \
val_out.assign(data_val, data_val + (data_size / sizeof(datatype))); \
}
void DataElement::get(vector<unsigned char>& ucharvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
DataElementGetNumericVectorDef(DATA_CHAR_VECTOR, char, DATA_UCHAR_VECTOR, DATA_INT_VECTOR, DATA_UINT_VECTOR, DATA_LONG_VECTOR, DATA_ULONG_VECTOR,
DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_UCHAR_VECTOR, unsigned char, DATA_CHAR_VECTOR, DATA_INT_VECTOR, DATA_UINT_VECTOR, DATA_LONG_VECTOR,
DATA_ULONG_VECTOR, DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_INT_VECTOR, int, DATA_CHAR_VECTOR, DATA_UCHAR_VECTOR, DATA_UINT_VECTOR, DATA_LONG_VECTOR, DATA_ULONG_VECTOR,
DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_UINT_VECTOR, unsigned int, DATA_CHAR_VECTOR, DATA_UCHAR_VECTOR, DATA_INT_VECTOR, DATA_LONG_VECTOR,
DATA_ULONG_VECTOR, DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_LONG_VECTOR, long, DATA_CHAR_VECTOR, DATA_UCHAR_VECTOR, DATA_INT_VECTOR, DATA_UINT_VECTOR, DATA_ULONG_VECTOR,
DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_ULONG_VECTOR, unsigned long, DATA_CHAR_VECTOR, DATA_UCHAR_VECTOR, DATA_INT_VECTOR, DATA_UINT_VECTOR,
DATA_LONG_VECTOR, DATA_LONGLONG_VECTOR);
DataElementGetNumericVectorDef(DATA_LONGLONG_VECTOR, long long, DATA_CHAR_VECTOR, DATA_UCHAR_VECTOR, DATA_INT_VECTOR, DATA_UINT_VECTOR,
DATA_LONG_VECTOR, DATA_ULONG_VECTOR);
DataElementGetNumericVectorDef(DATA_FLOAT_VECTOR, float, DATA_DOUBLE_VECTOR, DATA_LONGDOUBLE_VECTOR);
DataElementGetNumericVectorDef(DATA_DOUBLE_VECTOR, double, DATA_FLOAT_VECTOR, DATA_LONGDOUBLE_VECTOR);
DataElementGetNumericVectorDef(DATA_LONGDOUBLE_VECTOR, long double, DATA_DOUBLE_VECTOR, DATA_FLOAT_VECTOR);
if (data_type != DATA_UCHAR_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
unsigned char temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(unsigned char));
ucharvect_in.push_back(temp_char);
ptr += sizeof(unsigned char);
}
}
void DataElement::get(vector<unsigned int>& uintvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_UINT_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
unsigned int temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(unsigned int));
uintvect_in.push_back(temp_char);
ptr += sizeof(unsigned int);
}
}
void DataElement::get(vector<unsigned long>& ulongvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_ULONG_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
unsigned long temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(unsigned long));
ulongvect_in.push_back(temp_char);
ptr += sizeof(unsigned long);
}
}
void DataElement::get(vector<long long>& llongvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_LONGLONG_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
long long temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(long long));
llongvect_in.push_back(temp_char);
ptr += sizeof(long long);
}
}
void DataElement::get(vector<long double>& ldoublevect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_LONGDOUBLE_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
long double temp_char;
while (ptr < data_size) {
temp_char = 0;
memcpy(&temp_char, data_val + ptr, sizeof(long double));
ldoublevect_in.push_back(temp_char);
ptr += sizeof(long double);
}
}
void DataElement::get(vector<int> &intvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_INT_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a INT VECTOR"));
ptr = 0;
int temp_int;
while (ptr < data_size) {
temp_int = 0;
memcpy(&temp_int, data_val + ptr, sizeof(int));
intvect_in.push_back(temp_int);
ptr += sizeof(int);
}
}
void DataElement::get(vector<long> &longvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_LONG_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a LONG VECTOR"));
ptr = 0;
long temp_long;
while (ptr < data_size) {
temp_long = 0;
memcpy(&temp_long, data_val + ptr, sizeof(long));
longvect_in.push_back(temp_long);
ptr += sizeof(long);
}
}
void DataElement::get(vector<float> &floatvect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_FLOAT_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a FLOAT VECTOR"));
ptr = 0;
float temp_float;
while (ptr < data_size) {
temp_float = 0;
memcpy(&temp_float, data_val + ptr, sizeof(float));
floatvect_in.push_back(temp_float);
ptr += sizeof(float);
}
}
void DataElement::get(vector<double> &doublevect_in) throw (DataTypeMismatchException) {
long ptr;
if (!data_type)
return;
if (data_type != DATA_DOUBLE_VECTOR)
throw(new DataTypeMismatchException("Type mismatch, not a DOUBLE VECTOR"));
ptr = 0;
double temp_double;
while (ptr < data_size) {
temp_double = 0;
memcpy(&temp_double, data_val + ptr, sizeof(double));
doublevect_in.push_back(temp_double);
ptr += sizeof(double);
}
}
long DataElement::getSerializedSize() {
return sizeof(unsigned char) + sizeof(unsigned int) + data_size;

View File

@ -64,11 +64,10 @@ using namespace std;
#define DATA_LONG_VECTOR 18
#define DATA_ULONG_VECTOR 19
#define DATA_LONGLONG_VECTOR 20
#define DATA_ULONGLONG_VECTOR 21
#define DATA_FLOAT_VECTOR 22
#define DATA_DOUBLE_VECTOR 23
#define DATA_LONGDOUBLE_VECTOR 24
#define DATA_VOID 25
#define DATA_FLOAT_VECTOR 21
#define DATA_DOUBLE_VECTOR 22
#define DATA_LONGDOUBLE_VECTOR 23
#define DATA_VOID 24
/* map comparison function */
@ -122,6 +121,7 @@ class DataElement
private:
unsigned char data_type;
unsigned int data_size;
unsigned int unit_size;
char *data_val;
@ -133,9 +133,9 @@ public:
int getDataType();
long getDataSize();
int getUnitSize();
/* set overloads */
// void set(const bool &bool_in);
void set(const char &char_in);
void set(const unsigned char &uchar_in);
void set(const int &int_in);