#include <dm4io.h>
Collaboration diagram for EMAN::GatanDM4::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 158 of file dm4io.h.
int TagEntry::read | ( | bool | nodata = false |
) |
Definition at line 559 of file dm4io.cpp.
References EMAN::ByteOrder::become_big_endian(), DATA_TAG, EMAN::GatanDM4::TagGroup::get_entry_id(), EMAN::GatanDM4::TagGroup::get_name(), GROUP_TAG, in, LOGERR, LOGVAR, name, parent_group, portable_fseek(), EMAN::GatanDM4::TagGroup::read(), EMAN::GatanDM4::TagData::read(), tagtable, and EMAN::Gatan::to_str().
00560 { 00561 LOGVAR("TagEntry::read()"); 00562 int err = 0; 00563 char tag_type = 0; 00564 char *tmp_name = 0; 00565 00566 fread(&tag_type, sizeof(char), 1, in); 00567 00568 if (tag_type != GROUP_TAG && tag_type != DATA_TAG) { 00569 portable_fseek(in, sizeof(char) * 7, SEEK_CUR); 00570 fread(&tag_type, sizeof(char), 1, in); 00571 } 00572 00573 if (tag_type != GROUP_TAG && tag_type != DATA_TAG) { 00574 tag_type =fgetc(in); 00575 if (tag_type ==EOF) 00576 { 00577 return 1; 00578 } 00579 else{ 00580 LOGERR("TagEntry::read() invalid tag type: %d", tag_type); 00581 return 1; 00582 } 00583 } 00584 00585 00586 short name_len = 0; 00587 fread(&name_len, sizeof(short), 1, in); 00588 00589 ByteOrder::become_big_endian(&name_len); 00590 00591 if (name_len != 0) { 00592 tmp_name = new char[name_len + 1]; 00593 fread(tmp_name, name_len, 1, in); 00594 tmp_name[name_len] = '\0'; 00595 } 00596 else { 00597 string parent_name = parent_group->get_name(); 00598 name_len = static_cast < short >(parent_name.size() + 4); 00599 tmp_name = new char[name_len + 1]; 00600 sprintf(tmp_name, "%s #%d", parent_name.c_str(), parent_group->get_entry_id()); 00601 } 00602 00603 name = string(tmp_name); 00604 if( tmp_name ) 00605 { 00606 delete[]tmp_name; 00607 tmp_name = 0; 00608 } 00609 00610 LOGVAR("\ntag name: '%s', len: %d, type: '%s'", 00611 name.c_str(), name_len, GatanDM4::to_str((EntryType) tag_type)); 00612 00613 if (tag_type == DATA_TAG) { 00614 00615 TagData tag_data(in, tagtable, name); 00616 err = tag_data.read(nodata); 00617 } 00618 else if (tag_type == GROUP_TAG) { 00619 00620 TagGroup group(in, tagtable, name); 00621 err = group.read(nodata); 00622 } 00623 00624 /* 00625 long tot_size = 0; //size of DataType record + size of data 00626 fread(&tot_size, sizeof(long), 1, in); 00627 */ 00628 return err; 00629 }
FILE* EMAN::GatanDM4::TagEntry::in [private] |
string EMAN::GatanDM4::TagEntry::name [private] |
TagGroup* EMAN::GatanDM4::TagEntry::parent_group [private] |
TagTable* EMAN::GatanDM4::TagEntry::tagtable [private] |