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

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

?? untemplate.h

?? 虛幻的再開發程序包源代碼
?? H
?? 第 1 頁 / 共 3 頁
字號:
/*=============================================================================
	UnTemplate.h: Unreal templates.
	Copyright 1997-1999 Epic Games, Inc. All Rights Reserved.

	Revision history:
		* Created by Tim Sweeney
=============================================================================*/

/*-----------------------------------------------------------------------------
	Type information.
-----------------------------------------------------------------------------*/

//
// Type information for initialization.
//
template <class T> struct TTypeInfoBase
{
	typedef const T& ConstInitType;
	static UBOOL NeedsDestructor() {return 1;}
};
template <class T> struct TTypeInfo : public TTypeInfoBase<T>
{
};
template<> struct TTypeInfo<FString> : public TTypeInfoBase<T>
{
	typedef const TCHAR* ConstInitType;
};
template<> struct TTypeInfo<BYTE> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<SBYTE> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<ANSICHAR> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<INT> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<DWORD> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<_WORD> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<SWORD> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<QWORD> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};
template<> struct TTypeInfo<SQWORD> : public TTypeInfoBase<T>
{
	static UBOOL NeedsDestructor() {return 0;}
};

/*-----------------------------------------------------------------------------
	Standard templates.
-----------------------------------------------------------------------------*/

template< class T > inline T Abs( const T A )
{
	return (A>=(T)0) ? A : -A;
}
template< class T > inline T Sgn( const T A )
{
	return (A>0) ? 1 : ((A<0) ? -1 : 0);
}
template< class T > inline T Max( const T A, const T B )
{
	return (A>=B) ? A : B;
}
template< class T > inline T Min( const T A, const T B )
{
	return (A<=B) ? A : B;
}
template< class T > inline T Square( const T A )
{
	return A*A;
}
template< class T > inline T Clamp( const T X, const T Min, const T Max )
{
	return X<Min ? Min : X<Max ? X : Max;
}
template< class T > inline T Align( const T Ptr, INT Alignment )
{
	return (T)(((DWORD)Ptr + Alignment - 1) & ~(Alignment-1));
}
template< class T > inline void Exchange( T& A, T& B )
{
	const T Temp = A;
	A = B;
	B = Temp;
}
template< class T > T Lerp( T& A, T& B, FLOAT Alpha )
{
	return A + Alpha * (B-A);
}
inline DWORD GetTypeHash( const BYTE A )
{
	return A;
}
inline DWORD GetTypeHash( const SBYTE A )
{
	return A;
}
inline DWORD GetTypeHash( const _WORD A )
{
	return A;
}
inline DWORD GetTypeHash( const SWORD A )
{
	return A;
}
inline DWORD GetTypeHash( const INT A )
{
	return A;
}
inline DWORD GetTypeHash( const DWORD A )
{
	return A;
}
inline DWORD GetTypeHash( const QWORD A )
{
	return (DWORD)A+((DWORD)(A>>32) * 23);
}
inline DWORD GetTypeHash( const SQWORD A )
{
	return (DWORD)A+((DWORD)(A>>32) * 23);
}
inline DWORD GetTypeHash( const TCHAR* S )
{
	return appStrihash(S);
}
#define ExchangeB(A,B) {UBOOL T=A; A=B; B=T;}

/*----------------------------------------------------------------------------
	Standard macros.
----------------------------------------------------------------------------*/

// Number of elements in an array.
#define ARRAY_COUNT( array ) \
	( sizeof(array) / sizeof((array)[0]) )

// Offset of a struct member.
#define STRUCT_OFFSET( struc, member ) \
	( (INT)&((struc*)NULL)->member )

/*-----------------------------------------------------------------------------
	Allocators.
-----------------------------------------------------------------------------*/

template <class T> class TAllocator
{};

/*-----------------------------------------------------------------------------
	Dynamic array template.
-----------------------------------------------------------------------------*/

//
// Base dynamic array.
//
class CORE_API FArray
{
public:
	void* GetData()
	{
		return Data;
	}
	const void* GetData() const
	{
		return Data;
	}
	UBOOL IsValidIndex( INT i ) const
	{
		return i>=0 && i<ArrayNum;
	}
	INT Num() const
	{
		checkSlow(ArrayNum>=0);
		checkSlow(ArrayMax>=ArrayNum);
		return ArrayNum;
	}
	void Insert( INT Index, INT Count, INT ElementSize )
	{
		guardSlow(FArray::Insert);
		checkSlow(Count>=0);
		checkSlow(ArrayNum>=0);
		checkSlow(ArrayMax>=ArrayNum);
		checkSlow(Index>=0);
		checkSlow(Index<=ArrayNum);

		INT OldNum = ArrayNum;
		if( (ArrayNum+=Count)>ArrayMax )
		{
			ArrayMax = ArrayNum + 3*ArrayNum/8 + 32;
			Realloc( ElementSize );
		}
		appMemmove
		(
			(BYTE*)Data + (Index+Count )*ElementSize,
			(BYTE*)Data + (Index       )*ElementSize,
			              (OldNum-Index)*ElementSize
		);

		unguardSlow;
	}
	INT Add( INT Count, INT ElementSize )
	{
		guardSlow(FArray::Add);
		checkSlow(Count>=0);
		checkSlow(ArrayNum>=0);
		checkSlow(ArrayMax>=ArrayNum);

		INT Index = ArrayNum;
		if( (ArrayNum+=Count)>ArrayMax )
		{
			ArrayMax = ArrayNum + 3*ArrayNum/8 + 32;
			Realloc( ElementSize );
		}

		return Index;
		unguardSlow;
	}
	INT AddZeroed( INT ElementSize, INT n=1 )
	{
		guardSlow(FArray::AddZeroed);
		INT Index = Add( n, ElementSize );
		appMemzero( (BYTE*)Data+Index*ElementSize, n*ElementSize );
		return Index;
		unguardSlow;
	}
	void Shrink( INT ElementSize )
	{
		guardSlow(FArray::Shrink);
		checkSlow(ArrayNum>=0);
		checkSlow(ArrayMax>=ArrayNum);
		if( ArrayMax != ArrayNum )
		{
			ArrayMax = ArrayNum;
			Realloc( ElementSize );
		}
		unguardSlow;
	}
	void Empty( INT ElementSize, INT Slack=0 )
	{
		guardSlow(FArray::Empty);
		ArrayNum = 0;
		ArrayMax = Slack;
		Realloc( ElementSize );
		unguardSlow;
	}
	FArray()
	:	ArrayNum( 0 )
	,	ArrayMax( 0 )
	,	Data	( NULL )
	{}
	FArray( ENoInit )
	{}
	~FArray()
	{
		guardSlow(FArray::~FArray);
		if( Data )
			appFree( Data );
		Data = NULL;
		ArrayNum = ArrayMax = 0;
		unguardSlow;
	}
	void CountBytes( FArchive& Ar, INT ElementSize )
	{
		guardSlow(FArray::CountBytes);
		Ar.CountBytes( ArrayNum*ElementSize, ArrayMax*ElementSize );
		unguardSlow;
	}
	void Remove( INT Index, INT Count, INT ElementSize );
protected:
	void Realloc( INT ElementSize );
	FArray( INT InNum, INT ElementSize )
	:	ArrayNum( InNum )
	,	ArrayMax( InNum )
	,	Data    ( NULL  )
	{
		Realloc( ElementSize );
	}
	void* Data;
	INT	  ArrayNum;
	INT	  ArrayMax;
};

//
// Templated dynamic array.
//
template< class T > class TArray : public FArray
{
public:
	typedef T ElementType;
	TArray()
	:	FArray()
	{}
	TArray( INT InNum )
	:	FArray( InNum, sizeof(T) )
	{}
	TArray( const TArray& Other )
	:	FArray( Other.ArrayNum, sizeof(T) )
	{
		guardSlow(TArray::copyctor);
		ArrayNum=0;
		for( INT i=0; i<Other.ArrayNum; i++ )
			new(*this)T(Other(i));
		unguardSlow;
	}
	TArray( ENoInit )
	: FArray( E_NoInit )
	{}
	~TArray()
	{
		checkSlow(ArrayNum>=0);
		checkSlow(ArrayMax>=ArrayNum);
		Remove( 0, ArrayNum );
	}
    T& operator()( INT i )
	{
		guardSlow(TArray::operator());
		checkSlow(i>=0);
		checkSlow(i<=ArrayNum);
		checkSlow(ArrayMax>=ArrayNum);
		return ((T*)Data)[i];
		unguardSlow;
	}
	const T& operator()( INT i ) const
	{
		guardSlow(TArray::operator());
		checkSlow(i>=0);
		checkSlow(i<=ArrayNum);
		checkSlow(ArrayMax>=ArrayNum);
		return ((T*)Data)[i];
		unguardSlow;
	}
	T Pop()
	{
		guardSlow(TArray::Pop);
		check(ArrayNum>0);
		checkSlow(ArrayMax>=ArrayNum);
		T Result = ((T*)Data)[ArrayNum-1];
		Remove( ArrayNum-1 );
		return Result;
		unguardSlow;
	}
	T& Last()
	{
		guardSlow(TArray::Last);
		check(ArrayNum>0);
		checkSlow(ArrayMax>=ArrayNum);
		return ((T*)Data)[ArrayNum-1];
		unguardSlow;
	}
	const T& Last() const
	{
		guardSlow(TArray::Last);
		checkSlow(ArrayNum>0);
		checkSlow(ArrayMax>=ArrayNum);
		return ((T*)Data)[ArrayNum-1];
		unguardSlow;
	}
	void Shrink()
	{
		guardSlow(TArray::Shrink);
		FArray::Shrink( sizeof(T) );
		unguardSlow;
	}
	UBOOL FindItem( const T& Item, INT& Index ) const
	{
		guardSlow(TArray::FindItem);
		for( Index=0; Index<ArrayNum; Index++ )
			if( (*this)(Index)==Item )
				return 1;
		return 0;
		unguardSlow;
	}
	INT FindItemIndex( const T& Item ) const
	{
		guardSlow(TArray::FindItemIndex);
		for( INT Index=0; Index<ArrayNum; Index++ )
			if( (*this)(Index)==Item )
				return Index;
		return INDEX_NONE;
		unguardSlow;
	}
	friend FArchive& operator<<( FArchive& Ar, TArray& A )
	{
		guard(TArray<<);
		A.CountBytes( Ar );
		if( sizeof(T)==1 )
		{
			// Serialize simple bytes which require no construction or destruction.
			Ar << AR_INDEX(A.ArrayNum);
			if( Ar.IsLoading() )
			{
				A.ArrayMax = A.ArrayNum;
				A.Realloc( sizeof(T) );
			}
			Ar.Serialize( &A(0), A.Num() );
		}
		else if( Ar.IsLoading() )
		{
			// Load array.
			INT NewNum;
			Ar << AR_INDEX(NewNum);
			A.Empty( NewNum );
			for( INT i=0; i<NewNum; i++ )
				Ar << *new(A)T;
		}
		else
		{
			// Save array.
			Ar << AR_INDEX(A.ArrayNum);
			for( INT i=0; i<A.ArrayNum; i++ )
				Ar << A( i );
		}
		return Ar;
		unguard;
	}
	void CountBytes( FArchive& Ar )
	{
		guardSlow(TArray::CountBytes);
		FArray::CountBytes( Ar, sizeof(T) );
		unguardSlow;
	}

	// Add, Insert, Remove, Empty interface.
	INT Add( INT n=1 )
	{
		guardSlow(TArray::Add);
		return FArray::Add( n, sizeof(T) );
		unguardSlow;
	}
	void Insert( INT Index, INT Count=1 )
	{
		guardSlow(TTransArray::InsertZeroed);
		FArray::Insert( Index, Count, sizeof(T) );
		unguardSlow;
	}
	void Remove( INT Index, INT Count=1 )
	{
		guardSlow(TArray::Remove);
		check(Index>=0);
		check(Index<=ArrayNum);
		check(Index+Count<=ArrayNum);
		if( TTypeInfo<T>::NeedsDestructor() )
			for( INT i=Index; i<Index+Count; i++ )
				(&(*this)(i))->~T();
		FArray::Remove( Index, Count, sizeof(T) );
		unguardSlow;
	}
	void Empty( INT Slack=0 )
	{
		guardSlow(TArray::Empty);
		if( TTypeInfo<T>::NeedsDestructor() )
			for( INT i=0; i<ArrayNum; i++ )
				(&(*this)(i))->~T();
		FArray::Empty( sizeof(T), Slack );
		unguardSlow;
	}

	// Functions dependent on Add, Remove.
	TArray& operator=( const TArray& Other )
	{
		guardSlow(TArray::operator=);
		if( this != &Other )
		{
			Empty( Other.ArrayNum );
			for( INT i=0; i<Other.ArrayNum; i++ )
				new( *this )T( Other(i) );
		}
		return *this;
		unguardSlow;
	}
	INT AddItem( const T& Item )
	{
		guardSlow(TArray::AddItem);
		INT Index=Add();
		(*this)(Index)=Item;
		return Index;
		unguardSlow;
	}
	INT AddZeroed( INT n=1 )
	{
		guardSlow(TArray::AddZeroed);
		return FArray::AddZeroed( sizeof(T), n );
		unguardSlow;
	}
	INT AddUniqueItem( const T& Item )
	{
		guardSlow(TArray::AddUniqueItem);
		for( INT Index=0; Index<ArrayNum; Index++ )
			if( (*this)(Index)==Item )
				return Index;
		return AddItem( Item );
		unguardSlow;
	}
	INT RemoveItem( const T& Item )
	{
		guardSlow(TArray::RemoveItem);
		INT OriginalNum=ArrayNum;
		for( INT Index=0; Index<ArrayNum; Index++ )
			if( (*this)(Index)==Item )
				Remove( Index-- );
		return OriginalNum - ArrayNum;
		unguardSlow;
	}

	// Iterator.
	class TIterator
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人在线免费观看| 欧美国产日韩a欧美在线观看| 日韩欧美亚洲一区二区| 欧美激情在线看| 午夜精品视频一区| 欧美一区2区视频在线观看| 国产三级一区二区| 日韩中文欧美在线| 91免费观看视频在线| 久久伊99综合婷婷久久伊| 亚洲国产一区二区在线播放| 丁香一区二区三区| 精品少妇一区二区三区免费观看 | 99久久国产综合色|国产精品| 7777精品久久久大香线蕉| 综合久久久久久| 东方aⅴ免费观看久久av| 欧美成人高清电影在线| 偷偷要91色婷婷| 91国偷自产一区二区开放时间| 国产色爱av资源综合区| 激情小说欧美图片| 欧美一区二视频| 日韩在线一区二区| 欧美精选一区二区| 午夜一区二区三区在线观看| 一本久久精品一区二区| 国产精品久久久99| 国产a视频精品免费观看| 久久久99精品免费观看不卡| 国产一区二区精品久久| 欧美精品一区男女天堂| 久久黄色级2电影| 亚洲欧美日韩在线| 91小宝寻花一区二区三区| 国产精品久久久久久久浪潮网站| 国产精品99精品久久免费| 欧美国产精品中文字幕| 成人免费的视频| 中文字幕一区二区三区在线观看 | 黄色小说综合网站| 久久久不卡影院| 成人免费视频一区二区| 亚洲特级片在线| 在线观看亚洲a| 日本亚洲欧美天堂免费| 日韩久久久精品| 国产宾馆实践打屁股91| 亚洲色图.com| 欧美日韩一区二区三区四区 | 亚洲精品国久久99热| 欧美性欧美巨大黑白大战| 亚洲bt欧美bt精品777| 欧美日韩成人一区二区| 狠狠色丁香久久婷婷综合丁香| 国产三级欧美三级日产三级99 | 中文欧美字幕免费| 日本道精品一区二区三区 | 欧美日韩美女一区二区| 日韩国产精品大片| 国产无人区一区二区三区| 97超碰欧美中文字幕| 日本成人在线视频网站| 国产欧美日韩激情| 欧美午夜精品久久久| 国模一区二区三区白浆| 亚洲色图在线看| 精品美女一区二区三区| 99久久免费视频.com| 日韩国产欧美在线播放| 日本一区二区高清| 欧美视频在线一区| 国产成a人无v码亚洲福利| 亚洲成人免费电影| 久久久久久久久久电影| 欧美午夜影院一区| 高清在线观看日韩| 日本免费在线视频不卡一不卡二| 国产精品高潮久久久久无| 欧美日韩日日骚| 波多野结衣在线aⅴ中文字幕不卡| 亚洲国产精品久久久久婷婷884| 久久久久久9999| 欧美精品在线视频| 97se狠狠狠综合亚洲狠狠| 久久99精品久久只有精品| 亚洲精品中文字幕在线观看| 久久久.com| 日韩视频一区二区在线观看| 在线观看日韩电影| 精品国产亚洲在线| 欧美伦理影视网| 色悠久久久久综合欧美99| 国产麻豆精品在线| 男女男精品视频网| 亚洲成a人v欧美综合天堂| 综合色中文字幕| 国产欧美精品一区| 欧美成人三级在线| 91精品国产麻豆| 欧美日韩在线免费视频| 91日韩一区二区三区| 成人小视频在线| 国产高清精品久久久久| 久久aⅴ国产欧美74aaa| 人人精品人人爱| 婷婷国产在线综合| 五月天久久比比资源色| 亚洲一区国产视频| 一级女性全黄久久生活片免费| 国产精品美女久久久久久| 国产日韩欧美精品在线| 久久久亚洲精品石原莉奈| 亚洲精品一区二区精华| 欧美第一区第二区| 精品91自产拍在线观看一区| 精品美女被调教视频大全网站| 欧美一区日韩一区| 日韩欧美一级精品久久| 日韩一级二级三级精品视频| 日韩午夜精品视频| 欧美va亚洲va| 国产亚洲一本大道中文在线| 亚洲国产精品传媒在线观看| 国产欧美日韩视频在线观看| 欧美韩日一区二区三区| 中文字幕五月欧美| 亚洲摸摸操操av| 天天综合天天做天天综合| 热久久久久久久| 国模无码大尺度一区二区三区| 国产麻豆成人精品| av一区二区三区| 在线区一区二视频| 欧美一区二区三区四区五区| 日韩精品一区二区三区蜜臀| 久久蜜桃香蕉精品一区二区三区| 中文字幕欧美国产| 一区二区在线观看免费| 日本欧美一区二区在线观看| 国产综合色在线| 99久久国产综合精品色伊| 欧美日韩国产中文| 久久青草欧美一区二区三区| 日韩一区日韩二区| 日本不卡视频一二三区| 国产乱码精品1区2区3区| 91啪亚洲精品| 欧美大片一区二区| 中文字幕日韩一区| 奇米精品一区二区三区四区| 粉嫩蜜臀av国产精品网站| 在线观看91视频| 久久久午夜电影| 亚洲午夜精品网| 国产一区二区视频在线播放| 欧美在线制服丝袜| 精品国产91乱码一区二区三区| 亚洲欧美精品午睡沙发| 麻豆精品一二三| 91一区二区三区在线观看| 日韩片之四级片| 亚洲乱码国产乱码精品精的特点 | 亚洲激情欧美激情| 久久99久久久欧美国产| 91美女在线视频| 久久久精品影视| 亚洲成人免费电影| 精品福利视频一区二区三区| 一二三四区精品视频| 国产美女在线观看一区| 9191久久久久久久久久久| 国产精品久久精品日日| 久久99久久99| 欧美日韩日日摸| 亚洲激情欧美激情| 成人h动漫精品一区二| 日韩精品一区二区在线观看| 无吗不卡中文字幕| 日本道免费精品一区二区三区| 国产日本一区二区| 国内偷窥港台综合视频在线播放| 欧美日韩精品欧美日韩精品一综合| 久久精品一级爱片| 激情图片小说一区| 精品国产免费一区二区三区四区| 亚洲va在线va天堂| 欧洲一区在线电影| 亚洲最新在线观看| 99国产精品久| 日韩毛片一二三区| 99久久久国产精品免费蜜臀| 日本一区二区三级电影在线观看| 美女视频一区在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 91浏览器入口在线观看| 久久伊人蜜桃av一区二区| 久久99精品视频| 欧美日韩视频一区二区| 婷婷国产在线综合|