37 TableRecord::TableRecord(){
41 TableRecord::~TableRecord() {
51 p_fields.push_back(field);
62 return p_fields[field];
76 TableField &TableRecord::operator[](
const QString &field) {
79 for (
int i = 0; i < (int)p_fields.size(); i++) {
82 if (upTemp == upField)
return p_fields[i];
85 QString msg =
"Field [" + field +
"] does not exist in record";
94 int TableRecord::Fields()
const {
95 return p_fields.size();
103 int TableRecord::RecordSize()
const {
105 for (
int i = 0; i < (int)p_fields.size(); i++) bytes += p_fields[i].bytes();
116 void TableRecord::Pack(
char *buf)
const {
118 for (
int f = 0; f < Fields(); f++) {
121 vector<double> vals = field;
122 for (
unsigned int i = 0; i < vals.size(); i++) {
124 memmove(buf + sbyte, &vals[i], 8);
125 sbyte +=
sizeof(double);
129 vector<int> vals = field;
130 for (
unsigned int i = 0; i < vals.size(); i++) {
132 memmove(buf + sbyte, &vals[i], 4);
133 sbyte +=
sizeof(int);
136 else if (field.
isText()) {
137 QString val = (QString)field;
138 for (
int i = 0; i < field.
size(); i++) {
139 if (i < (
int)val.length()) {
140 buf[sbyte] = val[i].toLatin1();
148 else if (field.
isReal()) {
149 vector<float> vals = field;
150 for (
unsigned int i = 0; i < vals.size(); i++) {
152 memmove(buf + sbyte, &vals[i], 4);
153 sbyte +=
sizeof(float);
157 string msg =
"Invalid field type";
168 void TableRecord::Unpack(
const char *buf) {
170 for (
int f = 0; f < Fields(); f++) {
172 field = (
void *)&buf[sbyte];
173 sbyte += field.
bytes();
184 void TableRecord::Swap(
char *buf)
const {
186 for (
int f = 0; f < Fields(); f++) {
189 for (
int i = 0; i < field.
size(); i++) {
190 char *swap = &buf[sbyte];
205 sbyte +=
sizeof(double);
209 for (
int i = 0; i < field.
size(); i++) {
210 char *swap = &buf[sbyte];
218 sbyte +=
sizeof(int);
221 else if (field.
isText()) {
222 sbyte += field.
bytes();
224 else if (field.
isReal()) {
225 for (
int i = 0; i < field.
size(); i++) {
226 char *swap = &buf[sbyte];
234 sbyte +=
sizeof(float);
238 string msg =
"Unable to swap bytes. Invalid field type";
247 QString recordValues;
249 for (
int fieldIndex = 0;fieldIndex < record.
Fields();fieldIndex++) {
251 if (record[fieldIndex].size() == 1) {
252 recordValues += record[fieldIndex].name();
255 for (
int fieldValueIndex = 0;fieldValueIndex < record[fieldIndex].size();fieldValueIndex++) {
256 recordValues += record[fieldIndex].name();
257 if (record[fieldIndex].isText()) {
259 fieldValueIndex += record[fieldIndex].bytes();
265 if (fieldValueIndex != record[fieldIndex].size() - 1) {
267 recordValues += fieldDelimiter;
272 if (fieldIndex != record.
Fields() - 1) {
273 recordValues += fieldDelimiter;
277 recordValues +=
"\n";
280 for (
int fieldIndex = 0;fieldIndex < record.
Fields();fieldIndex++) {
283 if (fieldIndex != record.
Fields() - 1) {
285 recordValues += fieldDelimiter;
289 recordValues +=
"\n";
Namespace for the standard library.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
bool isReal() const
Determines whether the field type is Text.
int bytes() const
Returns the number of bytes in the field value.
bool isInteger() const
Determines whether the field type is Integer.
#define _FILEINFO_
Macro for the filename and line number.
int size() const
Returns the number of values stored for the field at each record.
Adds specific functionality to C++ strings.
Namespace for ISIS/Bullet specific routines.
int Fields() const
Returns the number of fields that are currently in the record.
bool isText() const
Determines whether the field type is Text.
Class for storing an Isis::Table's field information.
bool isDouble() const
Determines whether the field type is Double.
IString UpCase()
Converst any lower case characters in the object IString with uppercase characters.