EMAN::Gatan::TagEntry Class Reference

#include <dm3io.h>

Collaboration diagram for EMAN::Gatan::TagEntry:

Collaboration graph
[legend]
List of all members.

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
TagTabletagtable
TagGroupparent_group
string name

Detailed Description

Definition at line 159 of file dm3io.h.


Member Enumeration Documentation

enum EMAN::Gatan::TagEntry::EntryType

Enumerator:
GROUP_TAG 
DATA_TAG 

Definition at line 162 of file dm3io.h.

00163                         {
00164                                 GROUP_TAG = 20,
00165                                 DATA_TAG = 21
00166                         };


Constructor & Destructor Documentation

TagEntry::TagEntry ( FILE *  data_file,
TagTable tagtable,
TagGroup parent_group 
)

Definition at line 577 of file dm3io.cpp.

00578         :       in(data_file), tagtable(table), parent_group(parent), name("")
00579 {
00580 }

TagEntry::~TagEntry (  ) 

Definition at line 582 of file dm3io.cpp.

00583 {
00584 }


Member Function Documentation

int TagEntry::read ( bool  nodata = false  ) 

Definition at line 587 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().

00588 {
00589         LOGVAR("TagEntry::read()");
00590         int err = 0;
00591         char tag_type = 0;
00592         char *tmp_name = 0;
00593 
00594         fread(&tag_type, sizeof(char), 1, in);
00595 
00596         if (tag_type != GROUP_TAG && tag_type != DATA_TAG) {
00597                 LOGERR("TagEntry::read() invalid tag type: %d", tag_type);
00598                 return 1;
00599         }
00600 
00601         short name_len = 0;
00602         fread(&name_len, sizeof(short), 1, in);
00603         ByteOrder::become_big_endian(&name_len);
00604 
00605         if (name_len != 0) {
00606                 tmp_name = new char[name_len + 1];
00607                 fread(tmp_name, name_len, 1, in);
00608                 tmp_name[name_len] = '\0';
00609         }
00610         else {
00611                 string parent_name = parent_group->get_name();
00612                 name_len = static_cast < short >(parent_name.size() + 4);
00613                 tmp_name = new char[name_len + 1];
00614                 sprintf(tmp_name, "%s #%d", parent_name.c_str(), parent_group->get_entry_id());
00615         }
00616 
00617         name = string(tmp_name);
00618         if( tmp_name )
00619         {
00620                 delete[]tmp_name;
00621                 tmp_name = 0;
00622         }
00623 
00624         LOGVAR("\ntag name: '%s', len: %d, type: '%s'",
00625                    name.c_str(), name_len, Gatan::to_str((EntryType) tag_type));
00626 
00627         if (tag_type == DATA_TAG) {
00628                 TagData tag_data(in, tagtable, name);
00629                 err = tag_data.read(nodata);
00630         }
00631         else if (tag_type == GROUP_TAG) {
00632                 TagGroup group(in, tagtable, name);
00633                 err = group.read(nodata);
00634         }
00635 
00636         return err;
00637 }


Member Data Documentation

FILE* EMAN::Gatan::TagEntry::in [private]

Definition at line 174 of file dm3io.h.

Referenced by read().

string EMAN::Gatan::TagEntry::name [private]

Definition at line 177 of file dm3io.h.

Referenced by read().

TagGroup* EMAN::Gatan::TagEntry::parent_group [private]

Definition at line 176 of file dm3io.h.

Referenced by read().

TagTable* EMAN::Gatan::TagEntry::tagtable [private]

Definition at line 175 of file dm3io.h.

Referenced by read().


The documentation for this class was generated from the following files:
Generated on Tue Jun 11 12:45:38 2013 for EMAN2 by  doxygen 1.4.7