1 #if !defined(_PIODATA_H)
16 bool operator()(
const char* p,
const char* q)
const {
return strcmp(p, q) < 0; };
43 typedef std::multimap<const char*, PIO_FIELD*, Cstring_less>
VAR_MAP;
44 typedef VAR_MAP::iterator
VMI;
45 typedef VAR_MAP::const_iterator
CVMI;
46 typedef std::pair<VMI, VMI>
VMP;
47 typedef 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 =
false,
const std::set<const char*, Cstring_less>* rdata = 0,
54 const std::set<const char*, Cstring_less>* cdata = 0);
57 void print(std::ostream&);
58 void print(
const char*);
64 inline bool good_read() {
return (pio_field != 0) ? true :
false; }
81 void GetPIOData(
const char*,
const double*&,
const char*&);
88 if (RealData.find(_name) == RealData.end())
89 RealData.insert(strdup(_name));
93 if (CharData.find(_name) == CharData.end())
94 CharData.insert(strdup(_name));
100 std::set<const char*, Cstring_less> RealData;
101 std::set<const char*, Cstring_less> CharData;
103 std::istream* Infile;
107 int PIO_HEADER_LENGTH;
108 int PIO_INDEX_LENGTH;
109 const char* pio_dandt;
111 int64_t pio_position;
114 bool defer_read_data;
116 size_t timertype_len;
120 void ReadPioFieldData(
PIO_FIELD& pio_field);
121 bool read(
const char*,
const std::list<std::string>* fields_to_read = 0);
122 bool read(
const std::list<std::string>* fields_to_read = 0);
123 inline void byte_flip(
char* word, int64_t
size)
125 if (size_buf < (
size_t)
size)
130 buf =
new char[size_buf];
132 memcpy((
void*)buf, (
const void*)word,
size);
133 for (int64_t i = 0; i <
size; ++i)
134 word[i] = buf[
size - 1 - i];
138 inline T read_pio_word(T& val)
141 this->Infile->read((
char*)&word,
sizeof(word));
143 byte_flip((
char*)&word,
sizeof(word));
148 inline bool read_pio_bool()
151 this->Infile->read((
char*)&word,
sizeof(word));
153 byte_flip((
char*)&word,
sizeof(word));
154 return (word != 0) ? true :
false;
157 inline void fstr2Cstr(
char* s,
size_t len)
const
168 inline char* read_pio_char_string(
size_t len)
175 buf =
new char[size_buf];
177 this->Infile->read(buf, len);
180 char* val =
new char[strlen(buf) + 1];
185 inline void insert_VAR_MAP_pairs()
187 for (
int i = 0; i < pio_num; ++i)
189 if (pio_field[i].read_field_data)
191 #if !defined __SUNPRO_CC
192 VarMMap.insert(std::make_pair(pio_field[i].pio_name, pio_field + i));
194 VAR_MAP::value_type type(pio_field[i].pio_name, pio_field + i);
201 inline bool read_field(
const char* pio_name,
const std::list<std::string>* fields_to_read)
204 if (fields_to_read == 0)
208 for (std::list<std::string>::const_iterator pos = fields_to_read->begin();
209 pos != fields_to_read->end(); ++pos)
211 if (spio_name == *pos)