亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? container.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

BOOL CStockContainer::SetMap( )
{
	CSPMutex::Scoped	l(m_mutex);

	m_map.RemoveAll( );

	if( GetSize() == 0 )
		return TRUE;

	m_map.InitHashTable( GetSize() * 2 + 10 );

	for( int i=0; i<GetSize(); i++ )
	{
		CStockInfo	&info	=	ElementAt(i);
		m_map.SetAt( info.GetStockCode(), (void *)i );
	}
	return TRUE;
}

BOOL CStockContainer::SetAverage( PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd )
{
	CSPMutex::Scoped	l(m_mutex);

	SP_ASSERT( nProgStart <= nProgEnd );
	if( nProgStart > nProgEnd )
		return FALSE;

	CStockInfo & ave = m_infoAverage;
	CStockInfo & wave = m_infoWeightAverage;
	
	ave.Clear( );
	wave.Clear( );

	ave.SetStockCode( CStock::marketUnknown, slh_avrcode );
	ave.SetStockName( slh_avrname );
	wave.SetStockCode( CStock::marketUnknown, slh_wavrcode );
	wave.SetStockName( slh_wavrname );
	
	ave.m_reporttype	=	CStock::reportUnknown;
	wave.m_reporttype	=	CStock::reportUnknown;

	float	fTemp	=	0;

	float	dc[100], wdc[100];
	int i = 0;
	for( i=0; i<sizeof(dc)/sizeof(dc[0]); i++ )		dc[i]	=	0.;
	for( i=0; i<sizeof(wdc)/sizeof(wdc[0]); i++ )	wdc[i]	=	(float)0.0001;

	int		nProgressSegment	=	GetSize() / 25;
	float	dProgressRatio		=	( 0 == GetSize() ? 1 : ((float)(nProgEnd - nProgStart))/GetSize() );

	for( int nCount=0; nCount<GetSize(); nCount++ )
	{
		if( fnCallback && !(nCount % nProgressSegment) )
			fnCallback( PROG_PROGRESS, (int)(nProgStart+nCount*dProgressRatio), NULL, cookie );

		CStockInfo & info = ElementAt(nCount);

		float	factor	=	1; // (float)CStock::GetReportFactor( info.m_reporttype );

		if( CStock::typeshIndex == info.GetType() || CStock::typeszIndex == info.GetType()
			|| CStock::typeshBond == info.GetType() || CStock::typeszBond == info.GetType() )
			continue;

		ave.m_datebase		=	info.m_datebase;
		ave.m_datetech		=	info.m_datetech;
		wave.m_datebase		=	info.m_datebase;
		wave.m_datetech		=	info.m_datetech;

		float	w	=	info.m_fShare_count_total;

		/* 平均值 *********************************************************************/
		// ★技術數據
		int	m = 0, n = 0;
		if( info.m_fLast > 1e-4 )
		{
			ave.m_fLast		=	( ave.m_fLast * dc[m] + info.m_fLast )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fLast	=	( wave.m_fLast * wdc[n] + info.m_fLast * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( info.m_fOpen > 1e-4 )
		{
			ave.m_fOpen		=	( ave.m_fOpen * dc[m] + info.m_fOpen )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fOpen	=	( wave.m_fOpen * wdc[n] + info.m_fOpen * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( info.m_fClose > 1e-4 )
		{	
			ave.m_fClose	=	( ave.m_fClose * dc[m] + info.m_fClose )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fClose	=	( wave.m_fClose * wdc[n] + info.m_fClose * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( info.m_fHigh > 1e-4 )
		{
			ave.m_fHigh		=	( ave.m_fHigh * dc[m] + info.m_fHigh )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fHigh	=	( wave.m_fHigh * wdc[n] + info.m_fHigh * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( info.m_fLow > 1e-4 )
		{
			ave.m_fLow		=	( ave.m_fLow * dc[m] + info.m_fLow )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fLow		=	( wave.m_fLow * wdc[n] + info.m_fLow * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( info.m_fVolume > 1e-4 )
		{
			ave.m_fVolume	=	( ave.m_fVolume * dc[m] + info.m_fVolume )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fAmount > 1e-4 )
		{
			ave.m_fAmount	=	( ave.m_fAmount * dc[m] + info.m_fAmount )/(dc[m]+1);	dc[m]	+=	1;
		}

		for( i=0; i<sizeof(ave.m_fBuyPrice)/sizeof(ave.m_fBuyPrice[0]); i++ )
		{
			m++;	n++;
			if( info.m_fBuyPrice[i] > 1e-4 )
			{
				ave.m_fBuyPrice[i]		=	( ave.m_fBuyPrice[i] * dc[m] + info.m_fBuyPrice[i] )/(dc[m]+1);		dc[m]	+=	1;
				wave.m_fBuyPrice[i]		=	( wave.m_fBuyPrice[i] * wdc[n] + info.m_fBuyPrice[i] )/(wdc[n]+1);	wdc[n]	+=	w;
			}
		}
		for( i=0; i<sizeof(ave.m_fBuyVolume)/sizeof(ave.m_fBuyVolume[0]); i++ )
		{
			m++;	n++;
			if( info.m_fBuyVolume[i] > 1e-4 )
			{
				ave.m_fBuyVolume[i]		=	( ave.m_fBuyVolume[i] * dc[m] + info.m_fBuyVolume[i] )/(dc[m]+1);		dc[m]	+=	1;
				wave.m_fBuyVolume[i]	=	( wave.m_fBuyVolume[i] * wdc[n] + info.m_fBuyVolume[i] )/(wdc[n]+1);	wdc[n]	+=	w;
			}
		}
		for( i=0; i<sizeof(ave.m_fSellPrice)/sizeof(ave.m_fSellPrice[0]); i++ )
		{
			m++;	n++;
			if( info.m_fSellPrice[i] > 1e-4 )
			{
				ave.m_fSellPrice[i]		=	( ave.m_fSellPrice[i] * dc[m] + info.m_fSellPrice[i] )/(dc[m]+1);		dc[m]	+=	1;
				wave.m_fSellPrice[i]	=	( wave.m_fSellPrice[i] * wdc[n] + info.m_fSellPrice[i] )/(wdc[n]+1);	wdc[n]	+=	w;
			}
		}
		for( i=0; i<sizeof(ave.m_fSellVolume)/sizeof(ave.m_fSellVolume[0]); i++ )
		{
			m++;	n++;
			if( info.m_fSellVolume[i] > 1e-4 )
			{
				ave.m_fSellVolume[i]	=	( ave.m_fSellVolume[i] * dc[m] + info.m_fSellVolume[i] )/(dc[m]+1);		dc[m]	+=	1;
				wave.m_fSellVolume[i]	=	( wave.m_fSellVolume[i] * wdc[n] + info.m_fSellVolume[i] )/(wdc[n]+1);	wdc[n]	+=	w;
			}
		}

		// ★償債能力
		m++;	n++;
		if( fabs(info.m_fRatio_liquidity) > 1e-4 )
		{
			ave.m_fRatio_liquidity		=	( ave.m_fRatio_liquidity * dc[m] + info.m_fRatio_liquidity )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fRatio_liquidity		=	( wave.m_fRatio_liquidity * wdc[n] + info.m_fRatio_liquidity * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fRatio_quick) > 1e-4 )
		{
			ave.m_fRatio_quick			=	( ave.m_fRatio_quick * dc[m] + info.m_fRatio_quick )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fRatio_quick			=	( wave.m_fRatio_quick * wdc[n] + info.m_fRatio_quick * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fVelocity_receivables) > 1e-4 )
		{
			ave.m_fVelocity_receivables	=	( ave.m_fVelocity_receivables * dc[m] + info.m_fVelocity_receivables )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fVelocity_receivables=	( wave.m_fVelocity_receivables * wdc[n] + info.m_fVelocity_receivables * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}

		// ★經營能力
		m++;	n++;
		if( fabs(info.m_fVelocity_merchandise) > 1e-4 )
		{
			ave.m_fVelocity_merchandise	=	( ave.m_fVelocity_merchandise * dc[m] + info.m_fVelocity_merchandise )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fVelocity_merchandise=	( wave.m_fVelocity_merchandise * wdc[n] + info.m_fVelocity_merchandise * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fMain_income) > 1e-4 )
		{
			ave.m_fMain_income			=	( ave.m_fMain_income * dc[m] + factor*info.m_fMain_income )/(dc[m]+1);		dc[m]	+=	1;
		}
		m++;	n++;
		if( fabs(info.m_fCash_ps) > 1e-4 )
		{
			ave.m_fCash_ps				=	( ave.m_fCash_ps * dc[m] + factor*info.m_fCash_ps )/(dc[m]+1);				dc[m]	+=	1;
			wave.m_fCash_ps				=	( wave.m_fCash_ps * wdc[n] + factor * info.m_fCash_ps * w )/(wdc[n]+w);		wdc[n]	+=	w;
		}

		// ★盈利能力
		m++;	n++;
		if( fabs(info.m_fProfit_margin) > 1e-4 )
		{
			ave.m_fProfit_margin	=	( ave.m_fProfit_margin * dc[m] + info.m_fProfit_margin )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fProfit_margin	=	( wave.m_fProfit_margin * wdc[n] + info.m_fProfit_margin * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fNetasset_yield) > 1e-4 )
		{
			ave.m_fNetasset_yield	=	( ave.m_fNetasset_yield * dc[m] + factor*info.m_fNetasset_yield )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fNetasset_yield	=	( wave.m_fNetasset_yield * wdc[n] + factor * info.m_fNetasset_yield * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}

		// ★資本結構
		m++;	n++;
		if( info.m_fShare_count_total > 1e-4 )
		{
			ave.m_fShare_count_total	=	( ave.m_fShare_count_total * dc[m] + info.m_fShare_count_total )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fShare_count_a > 1e-4 )
		{
			ave.m_fShare_count_a		=	( ave.m_fShare_count_a * dc[m] + info.m_fShare_count_a )/(dc[m]+1);			dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fShare_count_b > 1e-4 )
		{
			ave.m_fShare_count_b		=	( ave.m_fShare_count_b * dc[m] + info.m_fShare_count_b )/(dc[m]+1);			dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fShare_count_h > 1e-4 )
		{
			ave.m_fShare_count_h		=	( ave.m_fShare_count_h * dc[m] + info.m_fShare_count_h )/(dc[m]+1);			dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fShare_count_national > 1e-4 )
		{
			ave.m_fShare_count_national	=	( ave.m_fShare_count_national * dc[m] + info.m_fShare_count_national )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( info.m_fShare_count_corp > 1e-4 )
		{
			ave.m_fShare_count_corp		=	( ave.m_fShare_count_corp * dc[m] + info.m_fShare_count_corp )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( fabs(info.m_fProfit_psud) > 1e-4 )
		{
			ave.m_fProfit_psud			=	( ave.m_fProfit_psud * dc[m] + info.m_fProfit_psud )/(dc[m]+1);				dc[m]	+=	1;
			wave.m_fProfit_psud			=	( wave.m_fProfit_psud * wdc[n] + info.m_fProfit_psud * w )/(wdc[n]+w);		wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fAsset) > 1e-4 )
		{
			ave.m_fAsset				=	( ave.m_fAsset * dc[m] + info.m_fAsset )/(dc[m]+1);							dc[m]	+=	1;
		}
		m++;	n++;
		if( fabs(info.m_fRatio_holderright) > 1e-4 )
		{
			ave.m_fRatio_holderright	=	( ave.m_fRatio_holderright * dc[m] + info.m_fRatio_holderright )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fRatio_holderright	=	( wave.m_fRatio_holderright * wdc[n] + info.m_fRatio_holderright * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fRatio_longdebt) > 1e-4 )
		{
			ave.m_fRatio_longdebt		=	( ave.m_fRatio_longdebt * dc[m] + info.m_fRatio_longdebt )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fRatio_longdebt		=	( wave.m_fRatio_longdebt * wdc[n] + info.m_fRatio_longdebt * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fRatio_debt) > 1e-4 )
		{
			ave.m_fRatio_debt			=	( ave.m_fRatio_debt * dc[m] + info.m_fRatio_debt )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fRatio_debt			=	( wave.m_fRatio_debt * wdc[n] + info.m_fRatio_debt * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}

		// ★投資收益能力
		m++;	n++;
		if( fabs(info.m_fNetasset_ps) > 1e-4 )
		{
			ave.m_fNetasset_ps		=	( ave.m_fNetasset_ps * dc[m] + info.m_fNetasset_ps )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fNetasset_ps		=	( wave.m_fNetasset_ps * wdc[n] + info.m_fNetasset_ps * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fNetasset_ps_regulate) > 1e-4 )
		{
			ave.m_fNetasset_ps_regulate	=	( ave.m_fNetasset_ps_regulate * dc[m] + info.m_fNetasset_ps_regulate )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fNetasset_ps_regulate=	( wave.m_fNetasset_ps_regulate * wdc[n] + info.m_fNetasset_ps_regulate * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fEps) > 1e-4 )
		{
			ave.m_fEps			=	( ave.m_fEps * dc[m] + factor*info.m_fEps )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fEps			=	( wave.m_fEps * wdc[n] + factor * info.m_fEps * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fEps_deduct) > 1e-4 )
		{
			ave.m_fEps_deduct	=	( ave.m_fEps_deduct * dc[m] + factor*info.m_fEps_deduct )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fEps_deduct	=	( wave.m_fEps_deduct * wdc[n] + factor * info.m_fEps_deduct * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}
		m++;	n++;
		if( fabs(info.m_fNet_profit) > 1e-4 )
		{
			ave.m_fNet_profit	=	( ave.m_fNet_profit * dc[m] + factor*info.m_fNet_profit )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( fabs(info.m_fMain_profit) > 1e-4 )
		{
			ave.m_fMain_profit	=	( ave.m_fMain_profit * dc[m] + factor*info.m_fMain_profit )/(dc[m]+1);	dc[m]	+=	1;
		}
		m++;	n++;
		if( fabs(info.m_fTotal_profit) > 1e-4 )
		{
			ave.m_fTotal_profit	=	( ave.m_fTotal_profit * dc[m] + factor*info.m_fTotal_profit )/(dc[m]+1);dc[m]	+=	1;
		}

		// ★增長率
		m++;	n++;
		ave.m_fProfit_inc	=	( ave.m_fProfit_inc * dc[m] + info.m_fProfit_inc )/(dc[m]+1);			dc[m]	+=	1;
		wave.m_fProfit_inc	=	( wave.m_fProfit_inc * wdc[n] + info.m_fProfit_inc * w )/(wdc[n]+w);	wdc[n]	+=	w;

		m++;	n++;
		ave.m_fIncome_inc	=	( ave.m_fIncome_inc * dc[m] + info.m_fIncome_inc )/(dc[m]+1);			dc[m]	+=	1;
		wave.m_fIncome_inc	=	( wave.m_fIncome_inc * wdc[n] + info.m_fIncome_inc * w )/(wdc[n]+w);	wdc[n]	+=	w;

		m++;	n++;
		ave.m_fAsset_inc	=	( ave.m_fAsset_inc * dc[m] + info.m_fAsset_inc )/(dc[m]+1);			dc[m]	+=	1;
		wave.m_fAsset_inc	=	( wave.m_fAsset_inc * wdc[n] + info.m_fAsset_inc * w )/(wdc[n]+w);	wdc[n]	+=	w;

		// ★技術數據統計值
		m++;	n++;
		if( fabs(STKLIB_DATA_INVALID - info.m_fYield_average) > 1e-4 )
		{
			ave.m_fYield_average	=	( ave.m_fYield_average * dc[m] + info.m_fYield_average )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fYield_average	=	( wave.m_fYield_average * wdc[n] + info.m_fYield_average * w )/(wdc[n]+w);	wdc[n]	+=	w;
			m++;	n++;
			if( fabs(STKLIB_DATA_INVALID - info.m_fYield_stddev) > 1e-4 )
			{
				ave.m_fYield_stddev	=	( ave.m_fYield_stddev * dc[m] + info.m_fYield_stddev )/(dc[m]+1);			dc[m]	+=	1;
				wave.m_fYield_stddev=	( wave.m_fYield_stddev * wdc[n] + info.m_fYield_stddev * w )/(wdc[n]+w);	wdc[n]	+=	w;
			}
		}
		m++;	n++;
		if( fabs(STKLIB_DATA_INVALID - info.m_fBeite) > 1e-4 )
		{
			ave.m_fBeite	=	( ave.m_fBeite * dc[m] + info.m_fBeite )/(dc[m]+1);			dc[m]	+=	1;
			wave.m_fBeite	=	( wave.m_fBeite * wdc[n] + info.m_fBeite * w )/(wdc[n]+w);	wdc[n]	+=	w;
		}

		// K線數據
		m++;	n++;
		if( 0 == nCount )
		{
			m_infoAverage.m_kdata		=	info.m_kdata;
			m_infoWeightAverage.m_kdata	=	info.m_kdata;
		}
		for( int k=info.m_kdata.GetSize()-1; k>=0; k-- )
		{
			KDATA	&	kdInfo	=	info.m_kdata.ElementAt(k);
			// 平均值
			int	nIndex = k;
			if( nIndex >= m_infoAverage.m_kdata.GetSize() || m_infoAverage.m_kdata.ElementAt(nIndex).m_date != kdInfo.m_date )
				nIndex	=	m_infoAverage.m_kdata.GetIndexByDate(kdInfo.m_date);
			if( -1 == nIndex )
			{
				KDATA	kdNew;
				memset( &kdNew, 0, sizeof(kdNew) );
				kdNew.m_date	=	kdInfo.m_date;
				nIndex	=	m_infoAverage.m_kdata.InsertKDataSort(kdNew);
			}
			if( -1 == nIndex )
				continue;
			KDATA	&	kdAve	=	m_infoAverage.m_kdata.ElementAt(nIndex);
			kdAve.m_fOpen	=	(kdAve.m_fOpen * dc[m] + kdInfo.m_fOpen)/(dc[m]+1);
			kdAve.m_fHigh	=	(kdAve.m_fHigh * dc[m] + kdInfo.m_fHigh)/(dc[m]+1);
			kdAve.m_fLow	=	(kdAve.m_fLow * dc[m] + kdInfo.m_fLow)/(dc[m]+1);
			kdAve.m_fClose	=	(kdAve.m_fClose * dc[m] + kdInfo.m_fClose)/(dc[m]+1);
			kdAve.m_fVolume	=	(kdAve.m_fVolume * dc[m] + kdInfo.m_fVolume)/(dc[m]+1);
			kdAve.m_fAmount	=	(kdAve.m_fAmount * dc[m] + kdInfo.m_fAmount)/(dc[m]+1);

			// 加權平均值
			nIndex = k;
			if( nIndex >= m_infoWeightAverage.m_kdata.GetSize() || m_infoWeightAverage.m_kdata.ElementAt(nIndex).m_date != kdInfo.m_date )
				nIndex	=	m_infoWeightAverage.m_kdata.GetIndexByDate(kdInfo.m_date);
			if( -1 == nIndex )
			{
				KDATA	kdNew;
				memset( &kdNew, 0, sizeof(kdNew) );
				kdNew.m_date	=	kdInfo.m_date;
				nIndex	=	m_infoWeightAverage.m_kdata.InsertKDataSort(kdNew);
			}
			if( -1 == nIndex )
				continue;
			KDATA	&	kdWAve	=	m_infoWeightAverage.m_kdata.ElementAt(nIndex);
			kdWAve.m_fOpen		=	(kdWAve.m_fOpen * wdc[n] + kdInfo.m_fOpen * w)/(wdc[n]+w);
			kdWAve.m_fHigh		=	(kdWAve.m_fHigh * wdc[n] + kdInfo.m_fHigh * w)/(wdc[n]+w);
			kdWAve.m_fLow		=	(kdWAve.m_fLow * wdc[n] + kdInfo.m_fLow * w)/(wdc[n]+w);
			kdWAve.m_fClose		=	(kdWAve.m_fClose * wdc[n] + kdInfo.m_fClose * w)/(wdc[n]+w);
			kdWAve.m_fVolume	=	(kdWAve.m_fVolume * wdc[n] + kdInfo.m_fVolume * w)/(wdc[n]+w);
			kdWAve.m_fAmount	=	(kdWAve.m_fAmount * wdc[n] + kdInfo.m_fAmount * w)/(wdc[n]+w);
		}
		dc[m]	+=	1;
		wdc[n]	+=	w;

		SP_ASSERT( m <= sizeof(dc)/sizeof(dc[0]) );
		SP_ASSERT( n <= sizeof(wdc)/sizeof(wdc[0]) );
	
	}

	if( fnCallback )
		fnCallback( PROG_PROGRESS, nProgEnd, NULL, cookie );

	return TRUE;
}

BOOL CStockContainer::Clear( )
{
	CSPMutex::Scoped	l(m_mutex);

	ClearVariantSaveValue( );

	// WARNING: Cannot clear this m_nCurrentStock	=	-1;
	// WARNING: Cannot clear this m_strCurrentStockCode.Empty();
	m_nType		=	typeNone;
	m_strDomain.Empty();
	m_dwDate = -1;
	RemoveAll();
	m_map.RemoveAll( );
	m_infoAverage.Clear( );
	m_infoWeightAverage.Clear( );

	m_auidSort.RemoveAll();
	return TRUE;
}

void CStockContainer::CopyData( CStockContainer & src )
{
	CSPMutex::Scoped	l(m_mutex);

	SetSize( src.GetSize() );
	for( int i=0; i<src.GetSize(); i++ )
	{
		CStockInfo	& info	=	src.ElementAt(i);
		SetAt( i, info );
	}
}

int CStockContainer::SortFunction(const void *s1,const void *s2)
{
	CStockInfo *pStock1 = (CStockInfo *)s1;
	CStockInfo *pStock2 = (CStockInfo *)s2;

	if( NULL == pStock2 )
		return 1;

	if( NULL == pStock1 )
		return -1;

	if( NULL == CStockContainer::m_pSortContainer )
		return 1;

	int nRet = AfxCompareVariantValue(	CStockContainer::m_pSortContainer->m_nSortVariantID, *pStock1, *pStock2,
										CStockContainer::m_pSortContainer );
	if( CStockContainer::m_pSortContainer->m_bSortAscend )
		return nRet;
	if( nRet > 0 )
		return -1;
	else if( nRet < 0 )
		return 1;
	return 0;
}

int CStockContainer::StockInfoCompareFunc( const void *s1,const void *s2, CStockContainer * pContainer, int nSortVariantID )
{
	CStockInfo *pStock1 = (CStockInfo *)s1;
	CStockInfo *pStock2 = (CStockInfo *)s2;

	if( NULL == pStock2 )
		return 1;

	if( NULL == pStock1 )
		return -1;

	return AfxCompareVariantValue(	nSortVariantID, *pStock1, *pStock2, pContainer );
}


BOOL CStockContainer::Sort( int nSortVariantID, BOOL bAscend )
{
	CSPMutex::Scoped	l(m_mutex);

	m_auidSort.RemoveAll();	// if call this Sort(...), then not use m_auidSort
	
	CStockContainer::m_pSortContainer	=	this;
	m_nSortVariantID	=	nSortVariantID;
	m_bSortAscend		=	bAscend;

	if( NULL != GetData() )
		qsort( GetData(), GetSize(), sizeof(CStockInfo), SortFunction );
	return TRUE;
}

void CStockContainer::SetSortID( CSPDWordArray & auidsort )
{
	CSPMutex::Scoped	l(m_mutex);

	m_auidSort.RemoveAll();
	m_auidSort.Copy( auidsort );
}

BOOL CStockContainer::GetMultiSortIDArray( CSPDWordArray & adwSortID, LONG lStockType, UINT nSLH, BOOL bAsc, int nCount )
{
	CSPMutex::Scoped	l(m_mutex);

	SP_ASSERT( nCount > 0 && nSLH >= SLH_MIN && nSLH <= SLH_MAX );
	if( nCount <= 0 || nSLH < SLH_MIN || nSLH > SLH_MAX )
		return FALSE;

	adwSortID.RemoveAll();

	for( int n=0; n<nCount; n++ )
	{
		int		nMinMaxIndex	=	-1;
		double	dMinMaxValue	=	0;
		BOOL	bInited	=	FALSE;
		for( int i=0; i<GetSize(); i++ )
		{
			CStockInfo & info	=	ElementAt(i);

			// 股票類型
			if( info.GetType() != lStockType )
				continue;

			// 如果加過,則繼續尋找下一個
			int k;
			for( k=0; k<adwSortID.GetSize(); k++ )
			{
				if( adwSortID[k] == (DWORD)i )
					break;
			}
			if( k != adwSortID.GetSize() )
				continue;

			// 判斷大小
			double	dValue	=	0;
			if( AfxGetVariantValue( nSLH, info, &dValue, NULL ) )
			{
				if( !bInited )
				{
					nMinMaxIndex	=	i;
					dMinMaxValue	=	dValue;
					bInited	=	TRUE;
				}
				if( bAsc && dValue < dMinMaxValue )
				{
					nMinMaxIndex	=	i;
					dMinMaxValue	=	dValue;
				}
				if( !bAsc && dValue > dMinMaxValue )
				{
					nMinMaxIndex	=	(DWORD)i;
					dMinMaxValue	=	dValue;
				}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产一区二区三区四区| 韩国女主播成人在线| 国产精品盗摄一区二区三区| 国产精品视频九色porn| 国产精品免费网站在线观看| 亚洲欧美日韩电影| 亚洲电影一区二区| 久久精品国产99国产精品| 欧美一区二区三区不卡| 91精品麻豆日日躁夜夜躁| 日韩久久免费av| 国产喷白浆一区二区三区| 亚洲精品一线二线三线无人区| 精品福利av导航| 国产精品视频看| 亚洲电影在线播放| 国产原创一区二区三区| 懂色av一区二区在线播放| 99精品国产99久久久久久白柏| 欧美日韩激情在线| 26uuu欧美| 亚洲欧美精品午睡沙发| 亚洲国产成人av网| 蜜臂av日日欢夜夜爽一区| 成av人片一区二区| 欧美精品三级在线观看| 精品国产免费视频| 日韩一区在线看| 久久99精品久久久久| 国产精品自在欧美一区| 91成人在线精品| 久久久久9999亚洲精品| 亚洲一区二区欧美激情| 国产综合色视频| 色噜噜狠狠色综合中国| 日韩免费成人网| 亚洲国产综合色| 99久久国产综合精品麻豆| 日韩欧美国产麻豆| 婷婷中文字幕一区三区| 91在线观看污| 日本一二三不卡| 狂野欧美性猛交blacked| 精品视频在线免费| 18成人在线观看| 国产成人在线免费观看| 日韩欧美一级在线播放| 日韩精品免费专区| 欧美亚洲国产bt| 成人免费高清在线观看| 国产婷婷色一区二区三区| 久久99国产精品免费| 3d动漫精品啪啪一区二区竹菊| 亚洲欧美视频在线观看| 不卡av在线网| 日本一区二区不卡视频| 国产成人免费在线| 久久综合久久综合九色| 日韩av在线免费观看不卡| 欧美在线综合视频| 亚洲精品久久久蜜桃| 成人av在线资源网站| 国产精品天干天干在线综合| 国产精品综合二区| 国产日韩三级在线| 国产成人av电影在线观看| 国产性色一区二区| 国产成人鲁色资源国产91色综 | 欧美激情在线观看视频免费| 国产一区二区三区久久久| 日韩欧美成人一区二区| 日本不卡一区二区三区高清视频| 欧美美女一区二区在线观看| 亚洲成人久久影院| 欧美日韩国产免费| 日韩在线卡一卡二| 91精品国产色综合久久ai换脸| 日日摸夜夜添夜夜添亚洲女人| 91麻豆精品国产91久久久久久久久| 五月激情六月综合| 日韩丝袜美女视频| 精品一区二区三区在线播放| 26uuuu精品一区二区| 粉嫩嫩av羞羞动漫久久久| 国产精品视频麻豆| 色88888久久久久久影院野外 | 欧美日本一道本| 日本aⅴ免费视频一区二区三区| 欧美一区二区三区四区五区 | 精品国产成人在线影院| 激情久久久久久久久久久久久久久久| 精品三级av在线| 成人av在线一区二区| 一区二区成人在线| 欧美一二三在线| 国产伦精一区二区三区| 综合中文字幕亚洲| 欧美日韩www| 狠狠久久亚洲欧美| 最新国产精品久久精品| 欧美天堂一区二区三区| 久草精品在线观看| 中文字幕一区二区三区四区不卡| 欧美午夜精品久久久| 男人的j进女人的j一区| 久久精品日韩一区二区三区| 色域天天综合网| 老司机午夜精品99久久| 国产精品热久久久久夜色精品三区| 色综合色狠狠综合色| 午夜精品一区在线观看| 精品国精品国产| 91亚洲国产成人精品一区二三| 亚洲成av人影院| 久久精品亚洲乱码伦伦中文| 色哟哟亚洲精品| 日韩午夜精品视频| 国产精品99久久久久| 一区二区在线看| 欧美不卡一区二区三区| av不卡免费在线观看| 调教+趴+乳夹+国产+精品| 精品国产不卡一区二区三区| 色偷偷久久一区二区三区| 免费人成精品欧美精品| 中文字幕一区三区| 91精品国产综合久久小美女| 成人黄色软件下载| 日韩制服丝袜先锋影音| 中国色在线观看另类| 欧美伦理影视网| 99免费精品视频| 美国毛片一区二区三区| 有坂深雪av一区二区精品| 精品福利一区二区三区| 欧美天天综合网| 成人aaaa免费全部观看| 久久精品噜噜噜成人av农村| 玉米视频成人免费看| 久久久.com| 欧美一区二区在线免费观看| 91小视频在线免费看| 国产一区二区中文字幕| 爽好久久久欧美精品| 亚洲猫色日本管| 国产欧美视频在线观看| 欧美一区二区三区四区在线观看| 色欧美乱欧美15图片| 国产成人免费网站| 精品在线观看视频| 日韩国产欧美一区二区三区| 亚洲欧美视频在线观看视频| 国产免费久久精品| 欧美变态凌虐bdsm| 51精品秘密在线观看| 欧美吞精做爰啪啪高潮| 91丨porny丨国产| 高清在线观看日韩| 国产一区二区不卡在线 | 韩国女主播一区| 日韩av在线免费观看不卡| 亚洲一区影音先锋| 亚洲免费色视频| 国产精品伦一区二区三级视频| 精品国产在天天线2019| 欧美成人综合网站| 91精品国产色综合久久不卡电影| 欧美日韩一卡二卡| 欧美视频一区在线| 欧美色网一区二区| 91黄色免费版| 色婷婷综合久久| 日本韩国一区二区| 色婷婷综合久色| 色婷婷久久99综合精品jk白丝| 99国产欧美久久久精品| 成人国产在线观看| 成人永久免费视频| 床上的激情91.| 不卡免费追剧大全电视剧网站| 成人性生交大合| 99精品视频一区| 一本大道综合伊人精品热热| 91福利精品视频| 欧美日韩亚洲国产综合| 欧美精品日韩精品| 欧美一级二级三级蜜桃| 日韩欧美国产麻豆| 久久中文字幕电影| 欧美国产精品一区二区| 国产精品视频一二三区| **性色生活片久久毛片| 亚洲免费视频中文字幕| 亚洲午夜电影在线观看| 五月婷婷久久丁香| 日本中文一区二区三区| 久久av老司机精品网站导航| 国产乱码精品一区二区三区忘忧草| 国产ts人妖一区二区| 91麻豆免费视频|