vector<int> searchRange(vector<int> &A, int target) { // write your code here vector<int> m_range(2, -1); if (A.size() < 1) return m_range; m_range[0] = findFirst(A, LEFT, target); m_range[1] = findFirst(A, RIGHT, target); return m_range; }
int CSeedManager::OutputOriginalData( CtrlParam* pctrl ) { int ret = TRUE; //开始解压数据 MergeSeedCell *pcurt; pcurt = m_list->NextElement(NULL); m_position = 0; //进度条 int pos = 0; m_position = 0; if(m_range != 0) m_range(m_list->GetElementCnt()); if(m_text != 0) { if(pctrl->type == EXPORT_MSEED) m_text((L"正在合并数据到MSEED"), FALSE); if(pctrl->type == EXPORT_BIN) m_text((L"正在合并数据到SEED"), FALSE); else m_text((L"正在合并数据"), FALSE); } //开始解压 while( pcurt != NULL) { if(m_pos != 0)//进度条更新 m_pos(pos++); pcurt->seed->SetDefaultFormat(m_defFormat); pcurt->seed->SetLogFile(m_plog); //重新加载并分析文件, if(FALSE == pcurt->seed->resume()) { ret = FALSE; break; } if (-1 == m_exp->ExportData((int*)pcurt->sinfo->lpAddr, ARRAY_DATA, pcurt->sinfo->iRecordLen, pctrl) ) { if(m_plog != NULL) m_plog->FormatAndAppendLog(error_seed, erro_data_export, ""); ret = FALSE; break; } //准备下一个seed文件 pcurt->seed->suspend();////////////////////////////////释放文件 pcurt = m_list->NextElement(pcurt); //释放前面已经处理过的seed文件 //m_list->DelFirstElement();/////////////////////////////// m_position ++;//记录进度 } return ret; }
uint64 FileStampToMillis(uint64 stamp) { uint y; uint m; uint d; uint h; uint i; uint s; uint l; uint64 ret; l = stamp % 1000; stamp /= 1000; s = stamp % 100; stamp /= 100; i = stamp % 100; stamp /= 100; h = stamp % 100; stamp /= 100; d = stamp % 100; stamp /= 100; m = stamp % 100; stamp /= 100; y = stamp; m_range(y, 1, FILE_STAMP_Y_MAX); m_range(m, 1, 12); m_range(d, 1, 31); m_range(h, 0, 23); m_range(i, 0, 59); m_range(s, 0, 59); m_range(l, 0, 999); ret = Date2Day(y, m, d); ret *= 24; ret += h; ret *= 60; ret += i; ret *= 60; ret += s; ret *= 1000; ret += l; return ret; }
uint64 MillisToFileStamp(uint64 millis) { uint y; uint m; uint d; uint h; uint i; uint s; uint l; uint64 ret; l = millis % 1000; millis /= 1000; s = millis % 60; millis /= 60; i = millis % 60; millis /= 60; h = millis % 24; millis /= 24; Day2Date(millis, &y, &m, &d); m_range(y, 1, FILE_STAMP_Y_MAX); // m_range(m, 1, 12); // m_range(d, 1, 31); // m_range(h, 0, 23); // m_range(i, 0, 59); // m_range(s, 0, 59); // m_range(l, 0, 999); ret = y; ret *= 100; ret += m; ret *= 100; ret += d; ret *= 100; ret += h; ret *= 100; ret += i; ret *= 100; ret += s; ret *= 1000; ret += l; return ret; }
int CSeedManager::OutputDcmpData( CtrlParam* pctrl ) { int ret = TRUE; //开始解压数据 MergeSeedCell *pcurt; CtrlParam loc; memcpy(&loc, pctrl, sizeof(CtrlParam)); pcurt = m_list->NextElement(NULL); //进度条 int pos = 0; m_position = 0; if(m_range != 0) m_range(m_list->GetElementCnt()); if(m_text != 0) { if(pctrl->type == EXPORT_TXT) m_text((L"正在合并数据到TXT"), FALSE); if(pctrl->type == EXPORT_BIN) m_text((L"正在合并数据到BIN"), FALSE); else m_text((L"正在合并数据"), FALSE); } //开始解压 while( pcurt != NULL) { if(m_pos != 0)//进度条更新 m_pos(pos++); pcurt->seed->SetDefaultFormat(m_defFormat); pcurt->seed->SetLogFile(m_plog); //重新加载并分析文件, if(FALSE == pcurt->seed->resume()) { ret = FALSE; break; } //按照要求对数据处理,解压抽取数据 if(FALSE == pcurt->seed->DcmpExtrStationDataByTime(pcurt->index, &loc.tstart, &loc.tend, loc.numerator, loc.denominator) ) continue; //如果提取到了数据,则写入 if (pcurt->sinfo->iDataCnt > 0) { //补数 if (-1 == AddLostData(&pcurt->sinfo->datatime, &loc.tstart, *pcurt->sinfo->pData, &loc)) { if(m_plog != NULL) m_plog->FormatAndAppendLog(error_seed, erro_data_export, ""); ret = FALSE; break; } memcpy(&loc.tstart, &pcurt->sinfo->datatime, sizeof(SYSTEMTIME)); if (-1 == m_exp->ExportData(pcurt->sinfo->pData, ARRAY_DATA, pcurt->sinfo->iDataCnt, &loc) ) { if(m_plog != NULL) m_plog->FormatAndAppendLog(error_seed, erro_data_export, ""); ret = FALSE; break; } //计算下一个seed文件的第一个数据的开始时间 memcpy(&loc.tstart, &pcurt->sinfo->datatime, sizeof(SYSTEMTIME)); SystemTimeAddFraction(&loc.tstart, &loc.tstart, pcurt->sinfo->dataFreq.denominator*pcurt->sinfo->iDataCnt, pcurt->sinfo->dataFreq.numerator); } //准备下一个seed文件 pcurt->seed->suspend();////////////////////////////////释放文件 pcurt->seed->FreeStationData();///////////////////////////释放解压得到的数据缓冲 pcurt = m_list->NextElement(pcurt); //释放前面已经处理过的seed文件 //m_list->DelFirstElement();/////////////////////////////// m_position ++;//记录进度 } //补数 if ( -1 == AddLostData(&loc.tend, &loc.tstart, 0, &loc)) { if(m_plog != NULL) m_plog->FormatAndAppendLog(error_seed, erro_data_export, ""); ret = FALSE; } return ret; }