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

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

?? icecontainer.h

?? opcode是功能強大
?? H
字號:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Contains a simple container class.
 *	\file		IceContainer.h
 *	\author		Pierre Terdiman
 *	\date		February, 5, 2000
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __ICECONTAINER_H__
#define __ICECONTAINER_H__

	#define CONTAINER_STATS

	enum FindMode
	{
		FIND_CLAMP,
		FIND_WRAP,

		FIND_FORCE_DWORD = 0x7fffffff
	};

	class Container
	{
		public:
		// Constructor / Destructor
								Container();
								Container(const Container& object);
								Container(udword size, float growth_factor);
								~Container();
		// Management
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	A O(1) method to add a value in the container. The container is automatically resized if needed.
		 *	The method is inline, not the resize. The call overhead happens on resizes only, which is not a problem since the resizing operation
		 *	costs a lot more than the call overhead...
		 *
		 *	\param		entry		[in] a udword to store in the container
		 *	\see		Add(float entry)
		 *	\see		Empty()
		 *	\see		Contains(udword entry)
		 *	\return		Self-Reference
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	Container&		Add(udword entry)
								{
									// Resize if needed
									if(mCurNbEntries==mMaxNbEntries)	Resize();

									// Add new entry
									mEntries[mCurNbEntries++]	= entry;
									return *this;
								}

		inline_	Container&		Add(const udword* entries, udword nb)
								{
									// Resize if needed
									if(mCurNbEntries+nb>mMaxNbEntries)	Resize(nb);

									// Add new entry
									CopyMemory(&mEntries[mCurNbEntries], entries, nb*sizeof(udword));
									mCurNbEntries+=nb;
									return *this;
								}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	A O(1) method to add a value in the container. The container is automatically resized if needed.
		 *	The method is inline, not the resize. The call overhead happens on resizes only, which is not a problem since the resizing operation
		 *	costs a lot more than the call overhead...
		 *
		 *	\param		entry		[in] a float to store in the container
		 *	\see		Add(udword entry)
		 *	\see		Empty()
		 *	\see		Contains(udword entry)
		 *	\return		Self-Reference
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	Container&		Add(float entry)
								{
									// Resize if needed
									if(mCurNbEntries==mMaxNbEntries)	Resize();

									// Add new entry
									mEntries[mCurNbEntries++]	= IR(entry);
									return *this;
								}

		inline_	Container&		Add(const float* entries, udword nb)
								{
									// Resize if needed
									if(mCurNbEntries+nb>mMaxNbEntries)	Resize(nb);

									// Add new entry
									CopyMemory(&mEntries[mCurNbEntries], entries, nb*sizeof(float));
									mCurNbEntries+=nb;
									return *this;
								}

		//! Add unique [slow]
		inline_	Container&		AddUnique(udword entry)
								{
									if(!Contains(entry))	Add(entry);
									return *this;
								}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Clears the container. All stored values are deleted, and it frees used ram.
		 *	\see		Reset()
		 *	\return		Self-Reference
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				Container&		Empty();

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Resets the container. Stored values are discarded but the buffer is kept so that further calls don't need resizing again.
		 *	That's a kind of temporal coherence.
		 *	\see		Empty()
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	void			Reset()
								{
									// Avoid the write if possible
									// ### CMOV
									if(mCurNbEntries)	mCurNbEntries = 0;
								}

		// HANDLE WITH CARE
		inline_	void			ForceSize(udword size)
								{
									mCurNbEntries = size;
								}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Sets the initial size of the container. If it already contains something, it's discarded.
		 *	\param		nb		[in] Number of entries
		 *	\return		true if success
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				bool			SetSize(udword nb);

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Refits the container and get rid of unused bytes.
		 *	\return		true if success
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				bool			Refit();

		// Checks whether the container already contains a given value.
				bool			Contains(udword entry, udword* location=null) const;
		// Deletes an entry - doesn't preserve insertion order.
				bool			Delete(udword entry);
		// Deletes an entry - does preserve insertion order.
				bool			DeleteKeepingOrder(udword entry);
		//! Deletes the very last entry.
		inline_	void			DeleteLastEntry()						{ if(mCurNbEntries)	mCurNbEntries--;			}
		//! Deletes the entry whose index is given
		inline_	void			DeleteIndex(udword index)				{ mEntries[index] = mEntries[--mCurNbEntries];	}

		// Helpers
				Container&		FindNext(udword& entry, FindMode find_mode=FIND_CLAMP);
				Container&		FindPrev(udword& entry, FindMode find_mode=FIND_CLAMP);
		// Data access.
		inline_	udword			GetNbEntries()					const	{ return mCurNbEntries;					}	//!< Returns the current number of entries.
		inline_	udword			GetEntry(udword i)				const	{ return mEntries[i];					}	//!< Returns ith entry
		inline_	udword*			GetEntries()					const	{ return mEntries;						}	//!< Returns the list of entries.

		inline_	udword			GetFirst()						const	{ return mEntries[0];					}
		inline_	udword			GetLast()						const	{ return mEntries[mCurNbEntries-1];		}

		// Growth control
		inline_	float			GetGrowthFactor()				const	{ return mGrowthFactor;					}	//!< Returns the growth factor
		inline_	void			SetGrowthFactor(float growth)			{ mGrowthFactor = growth;				}	//!< Sets the growth factor
		inline_	bool			IsFull()						const	{ return mCurNbEntries==mMaxNbEntries;	}	//!< Checks the container is full
		inline_	BOOL			IsNotEmpty()					const	{ return mCurNbEntries;					}	//!< Checks the container is empty

		//! Read-access as an array
		inline_	udword			operator[](udword i)			const	{ ASSERT(i>=0 && i<mCurNbEntries); return mEntries[i];	}
		//! Write-access as an array
		inline_	udword&			operator[](udword i)					{ ASSERT(i>=0 && i<mCurNbEntries); return mEntries[i];	}

		// Stats
				udword			GetUsedRam()					const;

		//! Operator for "Container A = Container B"
				void			operator = (const Container& object);

#ifdef CONTAINER_STATS
		inline_	udword			GetNbContainers()				const	{ return mNbContainers;		}
		inline_	udword			GetTotalBytes()					const	{ return mUsedRam;			}
		private:

		static	udword			mNbContainers;		//!< Number of containers around
		static	udword			mUsedRam;			//!< Amount of bytes used by containers in the system
#endif
		private:
		// Resizing
				bool			Resize(udword needed=1);
		// Data
				udword			mMaxNbEntries;		//!< Maximum possible number of entries
				udword			mCurNbEntries;		//!< Current number of entries
				udword*			mEntries;			//!< List of entries
				float			mGrowthFactor;		//!< Resize: new number of entries = old number * mGrowthFactor
	};

#endif // __ICECONTAINER_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文在线一区二区| 亚洲精品免费电影| 3atv一区二区三区| 欧美日韩一级二级三级| 欧美一区二区精美| 国产精品久久久久久户外露出| 一区二区三区四区在线播放| 蜜臀99久久精品久久久久久软件| 免费国产亚洲视频| 韩国v欧美v亚洲v日本v| 99国产精品久| 欧美一区二区成人6969| 中文字幕高清一区| 亚洲6080在线| av中文字幕一区| 日韩一区二区在线看| 国产精品乱码一区二三区小蝌蚪| 亚洲在线视频网站| 国产美女一区二区三区| 欧美在线观看视频在线| 久久亚洲一区二区三区四区| 亚洲成人动漫精品| 99久久伊人精品| 久久色.com| 日韩理论电影院| 日本欧美一区二区三区乱码| caoporen国产精品视频| 精品国产免费久久 | 国产精品国产三级国产aⅴ中文 | 在线观看一区不卡| 亚洲精品一区二区三区精华液| 亚洲免费毛片网站| 国产精品一区在线观看乱码| 欧美精品久久天天躁| 国产精品私人影院| 久久99久久精品| 99久久99久久免费精品蜜臀| 日韩丝袜美女视频| 亚洲自拍偷拍网站| 成人ar影院免费观看视频| 欧美成人性福生活免费看| 亚洲国产精品久久人人爱蜜臀 | 国产一区中文字幕| 欧美日韩精品一区视频| 亚洲欧美日韩系列| 不卡av在线网| 国产午夜一区二区三区| 免费成人性网站| 日韩一卡二卡三卡| 日本午夜一本久久久综合| 在线观看日韩电影| 一区二区三区四区国产精品| 国产真实乱偷精品视频免| 精品国产欧美一区二区| 老鸭窝一区二区久久精品| 在线播放一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 在线国产亚洲欧美| 亚洲一区二区三区在线播放| 欧美午夜精品久久久久久超碰| 亚洲欧美日韩国产综合在线| 成人一二三区视频| 欧美激情在线看| 成人18精品视频| 亚洲天堂中文字幕| 色婷婷综合在线| 亚洲成人综合视频| 欧美日本国产视频| 日本va欧美va瓶| 91精品免费在线| 自拍偷拍亚洲综合| a在线欧美一区| 亚洲午夜视频在线| 88在线观看91蜜桃国自产| 美女脱光内衣内裤视频久久网站| 精品毛片乱码1区2区3区 | 一区二区在线免费观看| 91精品国产色综合久久不卡电影| 久久国产生活片100| 26uuu精品一区二区在线观看| 成人综合婷婷国产精品久久蜜臀 | 国产精品久久久久久久久免费相片 | 日韩一区二区三区在线观看| 国产sm精品调教视频网站| 2023国产精品自拍| jiyouzz国产精品久久| 亚洲成人你懂的| 久久久久久免费毛片精品| 粉嫩高潮美女一区二区三区| 一区二区免费在线播放| 欧美一二三区在线观看| 东方aⅴ免费观看久久av| 亚洲免费色视频| 精品久久久久久久人人人人传媒| 成人精品亚洲人成在线| 亚洲国产精品一区二区久久| 久久免费看少妇高潮| 色综合天天视频在线观看| 免费三级欧美电影| 国产精品国产三级国产a| 色综合久久久久综合体桃花网| 日韩二区三区四区| 亚洲国产精品ⅴa在线观看| 欧美丝袜丝交足nylons图片| 高潮精品一区videoshd| 日韩av一二三| 国产精品久久久久久久久免费樱桃| 91.成人天堂一区| 99久久国产综合精品女不卡| 久久国产夜色精品鲁鲁99| 亚洲品质自拍视频| 久久精品视频在线看| 7777精品伊人久久久大香线蕉完整版 | www.99精品| 美女网站视频久久| 午夜天堂影视香蕉久久| 中文字幕一区av| 国产亚洲欧美日韩在线一区| 欧美一区二区三区不卡| 一本色道久久综合精品竹菊| 久久99精品久久久久久国产越南| 亚洲一区二区av电影| 成人欧美一区二区三区视频网页| 精品国产乱码久久久久久老虎| 欧美日韩成人在线| 91视频在线观看| 国产精品中文字幕欧美| 精品一区二区国语对白| 日韩va亚洲va欧美va久久| 亚洲精品午夜久久久| 最新高清无码专区| 欧美精品一区二区久久婷婷| 91精品国产综合久久婷婷香蕉| 欧美亚洲综合色| 日本精品裸体写真集在线观看 | 在线精品国精品国产尤物884a| 高清国产一区二区三区| 成人精品国产福利| 91捆绑美女网站| 欧美午夜一区二区三区| 欧美欧美欧美欧美首页| 日韩美女在线视频| 久久久久国产成人精品亚洲午夜| 国产精品―色哟哟| 亚洲精品国产无套在线观| 亚洲成av人综合在线观看| 蜜臀久久99精品久久久画质超高清| 精品一区二区三区在线播放| 国产成人av福利| 日本道色综合久久| 日韩一区二区精品在线观看| 国产精品三级久久久久三级| 亚洲成人黄色影院| 精品一区免费av| 成人午夜在线播放| 欧美日韩一区二区三区高清| 日韩免费观看2025年上映的电影| 欧美国产日本韩| 亚洲精品一二三四区| 精品一区中文字幕| 在线免费观看视频一区| 日韩免费看的电影| 一区二区三区中文在线| 国内外成人在线| 精品视频全国免费看| 国产亚洲欧美日韩俺去了| 亚洲综合在线五月| 国产精品影音先锋| 欧美日精品一区视频| 中文字幕国产精品一区二区| 免费欧美在线视频| 99在线视频精品| 精品精品国产高清一毛片一天堂| 亚洲综合色自拍一区| 国产成人免费在线观看| 欧美日韩国产在线观看| 日本一区二区三区四区在线视频 | 91精品国产综合久久久久久| 国产精品二区一区二区aⅴ污介绍| 久久精品久久精品| 欧美日韩一区高清| 日本一区二区三区四区在线视频| 另类小说一区二区三区| 欧美日韩国产三级| 亚洲免费观看高清在线观看| 高潮精品一区videoshd| 亚洲精品一区在线观看| 日韩精品五月天| 欧美视频中文一区二区三区在线观看| 国产精品少妇自拍| 国产精品综合av一区二区国产馆| 日韩视频一区二区三区| 爽好多水快深点欧美视频| 色婷婷综合五月| 亚洲欧美国产高清| 色综合久久久久久久久| 中文字幕五月欧美| 成人性生交大片免费| 国产精品网站在线| 国产91精品一区二区麻豆亚洲|