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;
 }
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}