#include <emio.h>


Public Member Functions | |
| EmIO (const string &filename, IOMode rw_mode=READ_ONLY) | |
| ~EmIO () | |
Static Public Member Functions | |
| static bool | is_valid (const void *first_block, off_t file_size=0) |
| static size_t | get_mode_size (char data_type) |
| static int | get_machine_type () |
| static int | to_em_datatype (char t) |
Public Attributes | |
| DEFINE_IMAGEIO_FUNC | |
Private Types | |
| enum | DataType { EM_EM_CHAR = 1, EM_EM_SHORT = 2, EM_EM_INT = 4, EM_EM_FLOAT = 5, EM_EM_COMPLEX = 8, EM_EM_DOUBLE = 9, EM_EM_UNKNOWN } |
| enum | MachineType { EM_OS8 = 0, EM_VAX = 1, EM_CONVEX = 2, EM_SGI = 3, EM_MAC = 5, EM_PC = 6, EM_UNKNOWN_MACHINE } |
Private Attributes | |
| string | filename |
| IOMode | rw_mode |
| FILE * | em_file |
| EMHeader | emh |
| size_t | mode_size |
| DataType | mode |
| bool | is_big_endian |
| bool | initialized |
| bool | is_new_file |
Classes | |
| struct | EMHeader |
EM image = header + data with (data = nx * ny * nz).
An EM image file stores 1 single 2D or 3D image.
Definition at line 48 of file emio.h.
enum EMAN::EmIO::DataType [private] |
Definition at line 77 of file emio.h.
00078 { 00079 EM_EM_CHAR = 1, 00080 EM_EM_SHORT = 2, 00081 EM_EM_INT = 4, 00082 EM_EM_FLOAT = 5, 00083 EM_EM_COMPLEX = 8, 00084 EM_EM_DOUBLE = 9, 00085 EM_EM_UNKNOWN 00086 };
enum EMAN::EmIO::MachineType [private] |
| EmIO::EmIO | ( | const string & | filename, | |
| IOMode | rw_mode = READ_ONLY | |||
| ) | [explicit] |
Definition at line 43 of file emio.cpp.
References EM_EM_UNKNOWN, emh, is_big_endian, EMAN::ByteOrder::is_host_big_endian(), is_new_file, mode, and mode_size.
00044 : filename(file), rw_mode(rw), em_file(0), initialized(false) 00045 { 00046 mode_size = 0; 00047 mode = EM_EM_UNKNOWN; 00048 is_big_endian = ByteOrder::is_host_big_endian(); 00049 is_new_file = false; 00050 memset(&emh, 0, sizeof(EMHeader)); 00051 }
| EmIO::~EmIO | ( | ) |
| bool EmIO::is_valid | ( | const void * | first_block, | |
| off_t | file_size = 0 | |||
| ) | [static] |
Definition at line 100 of file emio.cpp.
References data, EM_EM_CHAR, EM_EM_DOUBLE, EM_OS8, EM_PC, ENTERFUNC, get_mode_size(), EMAN::ByteOrder::is_data_big_endian(), EMAN::ByteOrder::is_host_big_endian(), nx, ny, and EMAN::ByteOrder::swap_bytes().
Referenced by EMAN::EMUtil::fast_get_image_type(), and EMAN::EMUtil::get_image_type().
00101 { 00102 ENTERFUNC; 00103 00104 if (!first_block) { 00105 return false; 00106 } 00107 00108 const char *data = static_cast < const char *>(first_block); 00109 char machine = data[0]; 00110 char is_new_ver = data[1]; 00111 char data_type = data[3]; 00112 00113 const int *data1 = static_cast < const int *>(first_block); 00114 int nx = data1[1]; 00115 int ny = data1[2]; 00116 int nz = data1[3]; 00117 00118 bool data_big_endian = ByteOrder::is_data_big_endian(&nz); 00119 if (data_big_endian != ByteOrder::is_host_big_endian()) { 00120 ByteOrder::swap_bytes(&nx); 00121 ByteOrder::swap_bytes(&ny); 00122 ByteOrder::swap_bytes(&nz); 00123 } 00124 00125 const int max_dim = 1 << 20; 00126 00127 if (((int) machine >= EM_OS8 && machine <= EM_PC) && 00128 (is_new_ver == 0 || is_new_ver == 1) && 00129 (data_type >= EM_EM_CHAR && data_type <= EM_EM_DOUBLE) && 00130 (nx > 1 && nx < max_dim) && (ny > 0 && ny < max_dim) && (nz > 0 && nz < max_dim)) { 00131 if (file_size > 0) { 00132 off_t file_size1 = (off_t)nx * (off_t)ny * (off_t)nz * (off_t)get_mode_size(data_type) + (off_t)sizeof(EMHeader); 00133 if (file_size == file_size1) { 00134 return true; 00135 } 00136 } 00137 else { 00138 return true; 00139 } 00140 } 00141 00142 return false; 00143 }
| size_t EmIO::get_mode_size | ( | char | data_type | ) | [static] |
Definition at line 344 of file emio.cpp.
References EM_EM_CHAR, EM_EM_COMPLEX, EM_EM_DOUBLE, EM_EM_FLOAT, EM_EM_INT, EM_EM_SHORT, and mode.
Referenced by is_valid().
00345 { 00346 int mode = (int) data_type; 00347 switch (mode) { 00348 case EM_EM_CHAR: 00349 return sizeof(char); 00350 case EM_EM_SHORT: 00351 return sizeof(short); 00352 case EM_EM_INT: 00353 case EM_EM_FLOAT: 00354 case EM_EM_COMPLEX: 00355 return sizeof(int); 00356 case EM_EM_DOUBLE: 00357 return sizeof(double); 00358 } 00359 return 0; 00360 }
| int EmIO::get_machine_type | ( | ) | [static] |
Definition at line 319 of file emio.cpp.
References EM_MAC, EM_PC, EM_SGI, and EM_UNKNOWN_MACHINE.
00320 { 00321 int m = EM_UNKNOWN_MACHINE; 00322 #ifdef __sgi 00323 m = EM_SGI; 00324 #elif defined __linux__ 00325 m = EM_PC; 00326 #elif defined __CYGWIN__ 00327 m = EM_PC; 00328 #elif defined WIN32 00329 m = EM_PC; 00330 #elif defined MACOS 00331 m = EM_MAC; 00332 #elif defined macintosh 00333 m = EM_MAC; 00334 #elif defined __darwin__ 00335 m = EM_MAC; 00336 #elif defined __APPLE__ 00337 m = EM_MAC; 00338 #else 00339 m = EM_UNKNOWN_MACHINE; 00340 #endif 00341 return m; 00342 }
| int EmIO::to_em_datatype | ( | char | t | ) | [static] |
Definition at line 297 of file emio.cpp.
References EMAN::EMUtil::EM_CHAR, EMAN::EMUtil::EM_DOUBLE, EM_EM_CHAR, EM_EM_COMPLEX, EM_EM_DOUBLE, EM_EM_FLOAT, EM_EM_INT, EM_EM_SHORT, EMAN::EMUtil::EM_FLOAT, EMAN::EMUtil::EM_FLOAT_COMPLEX, EMAN::EMUtil::EM_INT, EMAN::EMUtil::EM_SHORT, and EMAN::EMUtil::EM_UNKNOWN.
00298 { 00299 DataType type = static_cast < DataType > (t); 00300 switch (type) { 00301 case EM_EM_CHAR: 00302 return EMUtil::EM_CHAR; 00303 case EM_EM_SHORT: 00304 return EMUtil::EM_SHORT; 00305 case EM_EM_INT: 00306 return EMUtil::EM_INT; 00307 case EM_EM_FLOAT: 00308 return EMUtil::EM_FLOAT; 00309 case EM_EM_DOUBLE: 00310 return EMUtil::EM_DOUBLE; 00311 case EM_EM_COMPLEX: 00312 return EMUtil::EM_FLOAT_COMPLEX; 00313 default: 00314 break; 00315 } 00316 return EMUtil::EM_UNKNOWN; 00317 }
string EMAN::EmIO::filename [private] |
IOMode EMAN::EmIO::rw_mode [private] |
FILE* EMAN::EmIO::em_file [private] |
EMHeader EMAN::EmIO::emh [private] |
size_t EMAN::EmIO::mode_size [private] |
DataType EMAN::EmIO::mode [private] |
bool EMAN::EmIO::is_big_endian [private] |
bool EMAN::EmIO::initialized [private] |
bool EMAN::EmIO::is_new_file [private] |
1.5.6