EMAN::Gatan::TagEntry Class Reference

#include <dm3io.h>

Collaboration diagram for EMAN::Gatan::TagEntry:

Collaboration graph
[legend]

List of all members.

Public Types

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

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

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

TagEntry::~TagEntry (  ) 

Definition at line 577 of file dm3io.cpp.

00578 {
00579 }


Member Function Documentation

int TagEntry::read ( bool  nodata = false  ) 

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

Referenced by EMAN::Gatan::TagGroup::read().

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


Member Data Documentation

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

Definition at line 174 of file dm3io.h.

Referenced by read().

Definition at line 175 of file dm3io.h.

Referenced by read().

Definition at line 176 of file dm3io.h.

Referenced by read().

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

Definition at line 177 of file dm3io.h.

Referenced by read().


The documentation for this class was generated from the following files:

Generated on Sun Mar 21 02:20:46 2010 for EMAN2 by  doxygen 1.5.6