void OIBReader::ReadStream(POLE::Storage &pStg, wstring &stream_name) { POLE::Stream pStm(&pStg,ws2s(stream_name)); unsigned char *pbyData = 0; //open if (!pStm.eof() && !pStm.fail()) { //get stream size size_t sz = pStm.size(); //allocate pbyData = new unsigned char[sz]; if (!pbyData) return; //read if (pStm.read(pbyData,sz)) { //read oib info if (stream_name == wstring(L"OibInfo.txt")) { ReadOibInfo(pbyData, sz); } else { if (m_type==0 || (m_type==1 && m_oib_t==0)) ReadOif(pbyData, sz); } } } //release if (pbyData) delete[] pbyData; }
void OIFReader::Preprocess() { m_type = 0; m_oif_info.clear(); //separate path and name int64_t pos = m_path_name.find_last_of(GETSLASH()); if (pos == -1) return; wstring path = m_path_name.substr(0, pos+1); wstring name = m_path_name.substr(pos+1); //extract time sequence string int64_t begin = name.find(m_time_id); size_t end = -1; size_t id_len = m_time_id.size(); if (begin != -1) { wstring t_num; size_t j; for (j=begin+id_len; j<name.size(); j++) { wchar_t c = name[j]; if (iswdigit(c)) t_num.push_back(c); else break; } if (t_num.size() > 0) end = j; else begin = -1; } if (begin == -1) { ReadSingleOif(); } else { //search time sequence files std::vector<std::wstring> list; int tmp = 0; FIND_FILES(path,L".oif",list,tmp,name.substr(0,begin+id_len+1)); for(size_t i = 0; i < list.size(); i++) { size_t start_idx = list.at(i).find(m_time_id) + id_len; size_t end_idx = list.at(i).find(L".oif"); size_t size = end_idx - start_idx; std::wstring fileno = list.at(i).substr(start_idx, size); TimeDataInfo info; info.filenumber = WSTOI(fileno); info.filename = list.at(i); m_oif_info.push_back(info); } if (m_oif_info.size() > 0) { m_type = 1; std::sort(m_oif_info.begin(), m_oif_info.end(), OIFReader::oif_sort); ReadSequenceOif(); } else { m_oif_info.clear(); ReadSingleOif(); } } ReadOif(); m_time_num = int(m_oif_info.size()); if (m_type == 0) m_cur_time = 0; m_chan_num = m_time_num>0?int(m_oif_info[0].dataset.size()):0; m_slice_num = m_chan_num>0?int(m_oif_info[0].dataset[0].size()):0; }