Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

EMAN::GatanDM4::TagEntry Class Reference

#include <dm4io.h>

Collaboration diagram for EMAN::GatanDM4::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

Member Enumeration Documentation

enum EMAN::GatanDM4::TagEntry::EntryType
 

Enumeration values:
GROUP_TAG 
DATA_TAG 

Definition at line 161 of file dm4io.h.

Referenced by read().

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


Constructor & Destructor Documentation

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

Definition at line 550 of file dm4io.cpp.

References in.

00551         :       in(data_file), tagtable(table), parent_group(parent), name("")
00552 {
00553 }

TagEntry::~TagEntry  ) 
 

Definition at line 555 of file dm4io.cpp.

00556 {
00557 }


Member Function Documentation

int TagEntry::read bool  nodata = false  ) 
 

Definition at line 559 of file dm4io.cpp.

References EntryType, 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::GatanDM4::to_str().

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

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 }


Member Data Documentation

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

Definition at line 173 of file dm4io.h.

Referenced by read().

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

Definition at line 176 of file dm4io.h.

Referenced by read().

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

Definition at line 175 of file dm4io.h.

Referenced by read().

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

Definition at line 174 of file dm4io.h.

Referenced by read().


The documentation for this class was generated from the following files:
Generated on Tue Jun 11 13:49:55 2013 for EMAN2 by  doxygen 1.3.9.1