#include <dm3io.h>
Collaboration diagram for EMAN::Gatan::TagEntry:
Public Types | |
GROUP_TAG = 20 | |
DATA_TAG = 21 | |
enum | EntryType { GROUP_TAG = 20, DATA_TAG = 21 } |
Public Member Functions | |
TagEntry (FILE *data_file, TagTable *tagtable, TagGroup *parent_group) | |
~TagEntry () | |
int | read (bool nodata=false) |
Private Attributes | |
FILE * | in |
TagTable * | tagtable |
TagGroup * | parent_group |
string | name |
Definition at line 159 of file dm3io.h.
int TagEntry::read | ( | bool | nodata = false |
) |
Definition at line 583 of file dm3io.cpp.
References EMAN::ByteOrder::become_big_endian(), DATA_TAG, EMAN::Gatan::TagGroup::get_entry_id(), EMAN::Gatan::TagGroup::get_name(), GROUP_TAG, in, LOGERR, LOGVAR, name, parent_group, EMAN::Gatan::TagGroup::read(), EMAN::Gatan::TagData::read(), tagtable, and EMAN::Gatan::to_str().
00584 { 00585 LOGVAR("TagEntry::read()"); 00586 int err = 0; 00587 char tag_type = 0; 00588 char *tmp_name = 0; 00589 00590 fread(&tag_type, sizeof(char), 1, in); 00591 00592 if (tag_type != GROUP_TAG && tag_type != DATA_TAG) { 00593 LOGERR("TagEntry::read() invalid tag type: %d", tag_type); 00594 return 1; 00595 } 00596 00597 short name_len = 0; 00598 fread(&name_len, sizeof(short), 1, in); 00599 ByteOrder::become_big_endian(&name_len); 00600 00601 if (name_len != 0) { 00602 tmp_name = new char[name_len + 1]; 00603 fread(tmp_name, name_len, 1, in); 00604 tmp_name[name_len] = '\0'; 00605 } 00606 else { 00607 string parent_name = parent_group->get_name(); 00608 name_len = static_cast < short >(parent_name.size() + 4); 00609 tmp_name = new char[name_len + 1]; 00610 sprintf(tmp_name, "%s #%d", parent_name.c_str(), parent_group->get_entry_id()); 00611 } 00612 00613 name = string(tmp_name); 00614 if( tmp_name ) 00615 { 00616 delete[]tmp_name; 00617 tmp_name = 0; 00618 } 00619 00620 LOGVAR("\ntag name: '%s', len: %d, type: '%s'", 00621 name.c_str(), name_len, Gatan::to_str((EntryType) tag_type)); 00622 00623 if (tag_type == DATA_TAG) { 00624 TagData tag_data(in, tagtable, name); 00625 err = tag_data.read(nodata); 00626 } 00627 else if (tag_type == GROUP_TAG) { 00628 TagGroup group(in, tagtable, name); 00629 err = group.read(nodata); 00630 } 00631 00632 return err; 00633 }
FILE* EMAN::Gatan::TagEntry::in [private] |
string EMAN::Gatan::TagEntry::name [private] |
TagGroup* EMAN::Gatan::TagEntry::parent_group [private] |
TagTable* EMAN::Gatan::TagEntry::tagtable [private] |