1#if !defined(_PIODATA_H)
16 bool operator()(
const char* p,
const char* q)
const {
return strcmp(p, q) < 0; };
43typedef std::multimap<const char*, PIO_FIELD*, Cstring_less>
VAR_MAP;
44typedef VAR_MAP::iterator
VMI;
45typedef VAR_MAP::const_iterator
CVMI;
46typedef std::pair<VMI, VMI>
VMP;
47typedef std::pair<CVMI, CVMI>
CVMP;
52 PIO_DATA(
const char* piofile = 0,
const std::list<std::string>* fields_to_read = 0,
53 bool _defer_read_data =
true,
const std::set<const char*, Cstring_less>* rdata = 0,
54 const std::set<const char*, Cstring_less>* cdata = 0);
64 inline bool good_read() {
return (pio_field !=
nullptr) ? true :
false; }
81 void GetPIOData(
const char*,
const double*&,
const char*&);
87 const char* var,
int materialId);
90 if (RealData.find(_name) == RealData.end())
91 RealData.insert(strdup(_name));
95 if (CharData.find(_name) == CharData.end())
96 CharData.insert(strdup(_name));
102 std::set<const char*, Cstring_less> RealData;
103 std::set<const char*, Cstring_less> CharData;
105 std::istream* Infile;
109 int PIO_HEADER_LENGTH;
110 int PIO_INDEX_LENGTH;
111 const char* pio_dandt;
113 int64_t pio_position;
116 bool defer_read_data;
118 size_t timertype_len;
122 void ReadPioFieldData(
PIO_FIELD& pio_field);
123 bool read(
const char*,
const std::list<std::string>* fields_to_read = 0);
124 bool read(
const std::list<std::string>* fields_to_read = 0);
125 inline void byte_flip(
char* word, int64_t size)
127 if (size_buf < (
size_t)size)
132 buf =
new char[size_buf];
134 memcpy((
void*)buf, (
const void*)word, size);
135 for (int64_t i = 0; i < size; ++i)
136 word[i] = buf[size - 1 - i];
140 inline T read_pio_word(T& val)
143 this->Infile->read((
char*)&word,
sizeof(word));
145 byte_flip((
char*)&word,
sizeof(word));
150 inline bool read_pio_bool()
153 this->Infile->read((
char*)&word,
sizeof(word));
155 byte_flip((
char*)&word,
sizeof(word));
156 return (word != 0) ? true :
false;
159 inline void fstr2Cstr(
char* s,
size_t len)
const
170 inline char* read_pio_char_string(
size_t len)
177 buf =
new char[size_buf];
179 this->Infile->read(buf, len);
182 char* val =
new char[strlen(buf) + 1];
187 inline void insert_VAR_MAP_pairs()
189 for (
int i = 0; i < pio_num; ++i)
191 if (pio_field[i].read_field_data)
193#if !defined __SUNPRO_CC
194 VarMMap.insert(std::make_pair(pio_field[i].pio_name, pio_field + i));
196 VAR_MAP::value_type
type(pio_field[i].pio_name, pio_field + i);
203 inline bool read_field(
const char* pio_name,
const std::list<std::string>* fields_to_read)
205 std::string spio_name = std::string(pio_name);
206 if (fields_to_read == 0)
210 for (std::list<std::string>::const_iterator pos = fields_to_read->begin();
211 pos != fields_to_read->end(); ++pos)
213 if (spio_name == *pos)
bool IsPIOfile(const char *)
bool GetPIOfileTime(const char *, double &)
std::pair< VMI, VMI > VMP
std::pair< CVMI, CVMI > CVMP
std::multimap< const char *, PIO_FIELD *, Cstring_less > VAR_MAP
VAR_MAP::const_iterator CVMI
PIO_DATA(const char *piofile=0, const std::list< std::string > *fields_to_read=0, bool _defer_read_data=true, const std::set< const char *, Cstring_less > *rdata=0, const std::set< const char *, Cstring_less > *cdata=0)
void print(std::ostream &)
void AddCharData(const char *_name)
int get_pio_signature() const
void GetPIOData(PIO_FIELD &, const double *&)
int get_PIO_INDEX_LENGTH() const
void GetPIOData(PIO_FIELD &, const double *&, const char *&)
void AddRealData(const char *_name)
void GetPIOData(const char *, const double *&)
PIO_FIELD * get_pio_field() const
bool GetPIOfileTime(const char *, double &)
void GetPIOData(const char *, const char *&)
double GetPIOData(const char *, int)
const double * GetPIOData(PIO_FIELD &)
const char * get_name() const
void GetPIOData(PIO_FIELD &, const char *&)
void FreePIOData(PIO_FIELD &pio_field)
bool set_vector_field(std::valarray< std::valarray< double > > &, const char *)
bool set_scalar_field(std::valarray< double > &, const char *)
bool get_reverse_endian() const
int get_pio_num_with_size(int64_t n) const
int get_PIO_HEADER_LENGTH() const
int get_PIO_NAME_LENGTH() const
void GetPIOData(const char *, const double *&, const char *&)
bool set_scalar_field(std::valarray< uint64_t > &, const char *)
bool set_scalar_field(std::valarray< int64_t > &, const char *)
const double * GetPIOData(const char *)
bool reconstruct_chunk_field(int64_t numcell, std::valarray< double > &va, const char *prefix, const char *var, int materialId)
bool set_scalar_field(std::valarray< int > &, const char *)
const char * get_pio_dandt() const
int get_PIO_VERSION() const
bool operator()(const char *p, const char *q) const