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 573 of file dm3io.cpp.

00574         :       in(data_file), tagtable(table), parent_group(parent), name("")
00575 {
00576 }

TagEntry::~TagEntry (  ) 

Definition at line 578 of file dm3io.cpp.

00579 {
00580 }


Member Function Documentation

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 }


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 Thu May 3 10:11:53 2012 for EMAN2 by  doxygen 1.4.7