46 if (m_type == TableField::Integer) {
48 m_ivalues.resize(m_size);
50 else if (m_type == TableField::Double) {
52 m_dvalues.resize(m_size);
54 else if (m_type == TableField::Text) {
56 m_svalue.resize(m_size);
58 else if (m_type == TableField::Real) {
60 m_rvalues.resize(m_size);
76 m_name = (QString) field[
"Name"];
77 m_size = (int) field[
"Size"];
78 if ((QString) field[
"Type"] ==
"Integer") {
79 m_type = TableField::Integer;
81 m_ivalues.resize(m_size);
83 else if ((QString) field[
"Type"] ==
"Double") {
84 m_type = TableField::Double;
86 m_dvalues.resize(m_size);
88 else if ((QString) field[
"Type"] ==
"Text") {
89 m_type = TableField::Text;
91 m_svalue.resize(m_size);
93 else if ((QString) field[
"Type"] ==
"Real") {
94 m_type = TableField::Real;
96 m_rvalues.resize(m_size);
99 QString msg =
"Field [" + m_name +
"] has invalid type.";
105 TableField::~TableField() {
113 QString TableField::name()
const {
138 bool TableField::isInteger()
const {
139 return (m_type == TableField::Integer);
148 bool TableField::isDouble()
const {
149 return (m_type == TableField::Double);
157 bool TableField::isText()
const {
158 return (m_type == TableField::Text);
166 bool TableField::isReal()
const {
167 return (m_type == TableField::Real);
175 int TableField::bytes()
const {
184 int TableField::size()
const {
204 TableField::operator int()
const {
205 if (m_type != TableField::Integer) {
206 QString msg =
"Field [" + m_name +
"] is not Integer.";
209 if (m_ivalues.size() > 1) {
210 QString msg =
"Field [" + m_name +
"] has multiple Integer values. "
211 "Use std::vector<int>().";
233 TableField::operator double()
const {
234 if (m_type != TableField::Double) {
235 QString msg =
"Field [" + m_name +
"] is not a Double.";
238 if (m_dvalues.size() > 1) {
239 QString msg =
"Field [" + m_name +
"] has multiple Double values. "
240 "Use std::vector<double>().";
262 TableField::operator float()
const {
263 if (m_type != TableField::Real) {
264 QString msg =
"Field [" + m_name +
"] is not Real.";
267 if (m_rvalues.size() > 1) {
268 QString msg =
"Field [" + m_name +
"] has multiple Real values. "
269 "Use std::vector<float>().";
289 TableField::operator QString()
const {
290 if (m_type != TableField::Text) {
291 QString msg =
"Field [" + m_name +
"] is not Text.";
294 return QString(m_svalue.toAscii().data());
309 TableField::operator std::vector<int>()
const {
310 if (m_type != TableField::Integer) {
311 QString msg =
"Field [" + m_name +
"] is not an Integer array.";
329 TableField::operator std::vector<double>()
const {
330 if (m_type != TableField::Double) {
331 QString msg =
"Field [" + m_name +
"] is not a Double array.";
349 TableField::operator std::vector<float>()
const {
350 if (m_type != TableField::Real) {
351 QString msg =
"Field [" + m_name +
"] is not a Real array.";
366 void TableField::operator=(
const int value) {
367 if (m_type != TableField::Integer) {
368 QString msg =
"Unable to set field to the given int value. Field ["
369 + m_name +
"] Type is not Integer.";
373 QString msg =
"Unable to set field to the given int value. "
374 "Field [" + m_name +
"] has [" +
toString(m_size) +
"] "
375 "Integer values. Use operator=(vector<int>).";
378 m_ivalues[0] = value;
390 void TableField::operator=(
const double value) {
391 if (m_type != TableField::Double) {
392 QString msg =
"Unable to set field to the given double value. Field ["
393 + m_name +
"] Type is not Double.";
397 QString msg =
"Unable to set field to the given double value. "
398 "Field [" + m_name +
"] has [" +
toString(m_size) +
"] "
399 "Double values. Use operator=(vector<double>).";
402 m_dvalues[0] = value;
414 void TableField::operator=(
const float value) {
415 if (m_type != TableField::Real) {
416 QString msg =
"Unable to set field to the given float value. Field ["
417 + m_name +
"] Type is not Real.";
421 QString msg =
"Unable to set field to the given float value. "
422 "Field [" + m_name +
"] has [" +
toString(m_size) +
"] "
423 "Real values. Use operator=(vector<float>).";
426 m_rvalues[0] = value;
436 void TableField::operator=(
const QString &value) {
438 if (m_type != TableField::Text) {
439 QString msg =
"Unable to set field to the given string value. Field ["
440 + m_name +
"] Type is not Text.";
443 if (m_size < (
int) val.size()) {
444 for (
int i = m_size; i < val.size(); i++) {
446 if (val[i] !=
' ' && val[i] !=
'\0') {
447 QString msg =
"Unable to set the Text TableField to the given string. "
448 "The number of bytes allowed for this field value ["
449 +
toString(m_size) +
"] is less than the length of the "
450 "given string [" + value +
"].";
469 void TableField::operator=(
const std::vector<int> &values) {
470 if (m_type != TableField::Integer) {
471 QString msg =
"Unable to set field to the given vector of int values. "
472 "Field [" + m_name +
"] Type is not Integer.";
475 else if ((
int) values.size() != m_size) {
476 QString msg =
"Unable to set field to the given vector of int values. "
477 "Field [" + m_name +
"] values has size ["
493 void TableField::operator=(
const std::vector<double> &values) {
494 if (m_type != TableField::Double) {
495 QString msg =
"Unable to set field to the given vector of double values. "
496 "Field [" + m_name +
"] Type is not Double.";
499 else if ((
int) values.size() != m_size) {
500 QString msg =
"Unable to set field to the given vector of double values. "
501 "Field [" + m_name +
"] values has size ["
518 void TableField::operator=(
const std::vector<float> &values) {
519 if (m_type != TableField::Real) {
520 QString msg =
"Unable to set field to the given vector of float values. "
521 "Field [" + m_name +
"] Type is not Real.";
524 else if ((
int) values.size() != m_size) {
525 QString msg =
"Unable to set field to the given vector of float values. "
526 "Field [" + m_name +
"] values has size ["
544 void TableField::operator=(
const void *ibuf) {
545 char *buf = (
char *) ibuf;
546 if (m_type == TableField::Double) {
547 for (
unsigned int i = 0; i < m_dvalues.size(); i++) {
550 memmove(&bufDouble, buf + i * 8, 8);
551 m_dvalues[i] = bufDouble;
554 else if (m_type == TableField::Integer) {
555 for (
unsigned int i = 0; i < m_ivalues.size(); i++) {
558 memmove(&bufInt, buf + i * 4, 4);
559 m_ivalues[i] = bufInt;
562 else if (m_type == TableField::Text) {
563 m_svalue.resize(bytes());
564 for (
int i = 0; i < bytes(); i++) {
565 m_svalue[i] = buf[i];
568 else if (m_type == TableField::Real) {
569 for (
unsigned int i = 0; i < m_rvalues.size(); i++) {
572 memmove(&bufFloat, buf + i * 4, 4);
573 m_rvalues[i] = bufFloat;
577 string msg =
"Undefined field type [" +
IString(m_type) +
"].";
591 void TableField::operator=(
const char *buf) {
592 if (m_type != TableField::Text) {
593 QString msg =
"Unable to set field to the given string value. Field [" + m_name +
"] Type is not Text.";
608 if (m_type == TableField::Double) {
611 else if (m_type == TableField::Integer) {
614 else if (m_type == TableField::Text) {
617 else if (m_type == TableField::Real) {