亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
av亚洲产国偷v产偷v自拍| 337p日本欧洲亚洲大胆精品| 欧美高清视频不卡网| 久久精品一区蜜桃臀影院| 亚洲国产另类精品专区| av成人老司机| 精品少妇一区二区三区在线播放| 最新热久久免费视频| 国产尤物一区二区| 欧美精选一区二区| 一区二区三区小说| 成人激情av网| 久久久久久免费网| 精品在线一区二区| 91精品国产综合久久精品麻豆| 亚洲欧美在线观看| 国产99久久久国产精品| 欧美videossexotv100| 日韩主播视频在线| 色婷婷av一区二区| 中文字幕亚洲精品在线观看| 国产精品一区二区久激情瑜伽| 欧美一级国产精品| 日本午夜精品一区二区三区电影| 欧美日韩国产高清一区二区三区| 亚洲精品久久久久久国产精华液 | 久久九九全国免费| 蜜臀av性久久久久av蜜臀妖精| 在线成人高清不卡| 五月天欧美精品| 欧美电影在哪看比较好| 午夜一区二区三区在线观看| 在线看国产日韩| 亚洲自拍都市欧美小说| 欧美亚洲动漫制服丝袜| 亚洲一卡二卡三卡四卡五卡| 欧美日韩在线一区二区| 亚洲成a人片在线观看中文| 欧美精品日韩一本| 免费看日韩精品| 久久久久国产精品厨房| jlzzjlzz亚洲女人18| 亚洲精品国产一区二区精华液 | 一本久道久久综合中文字幕| 亚洲天堂精品在线观看| 欧美亚洲高清一区| 日本三级韩国三级欧美三级| 欧美tk—视频vk| 成人精品在线视频观看| 亚洲欧美另类图片小说| 欧美日韩国产综合一区二区| 激情图片小说一区| 国产性做久久久久久| 91影视在线播放| 日韩不卡在线观看日韩不卡视频| 精品日韩99亚洲| 成人av网站在线观看免费| 一区二区三区**美女毛片| 91精品国产欧美一区二区18 | 99久久精品国产一区二区三区| 亚洲精品国产a| 日韩视频免费观看高清完整版在线观看 | 国产一区二区三区视频在线播放| 中文字幕国产精品一区二区| 色婷婷av一区二区三区之一色屋| 日韩精品高清不卡| 国产视频一区二区三区在线观看| 91久久一区二区| 国产一二三精品| 夜色激情一区二区| 久久久久88色偷偷免费| 欧美日韩国产区一| 成人永久aaa| 裸体在线国模精品偷拍| 亚洲欧美韩国综合色| 日韩一区二区三免费高清| av动漫一区二区| 激情小说欧美图片| 亚洲国产视频网站| 国产精品美女久久久久久久久| 欧美日韩亚洲综合一区| 成人av在线播放网站| 久久狠狠亚洲综合| 亚洲国产一区视频| 亚洲欧美日韩一区| 国产午夜久久久久| 日韩一级完整毛片| 精品视频一区二区三区免费| 高清不卡一区二区在线| 激情综合色播五月| 肉色丝袜一区二区| 亚洲一区二区在线播放相泽| 欧美韩国日本一区| 国产午夜亚洲精品羞羞网站| 欧美一区2区视频在线观看| 欧美午夜精品久久久久久超碰| 成人免费黄色在线| 国产精品亚洲专一区二区三区| 麻豆一区二区99久久久久| 国产精品色一区二区三区| 日韩一区二区中文字幕| 99re成人在线| 成人一区在线观看| 成人激情免费视频| 成人午夜视频在线观看| 国产一区二区三区久久悠悠色av| 男男gaygay亚洲| 日韩国产成人精品| 日韩专区欧美专区| 日韩高清在线电影| 免费视频最近日韩| 美女久久久精品| 久久91精品国产91久久小草| 男女男精品视频| 久久国产精品72免费观看| 蜜臀久久99精品久久久久宅男| 日韩av在线播放中文字幕| 石原莉奈在线亚洲二区| 日产精品久久久久久久性色| 天堂一区二区在线免费观看| 婷婷成人综合网| 另类成人小视频在线| 国产乱对白刺激视频不卡| 高清免费成人av| 91丨porny丨最新| 在线视频国产一区| 欧美区在线观看| 欧美mv日韩mv| 国产精品国产三级国产普通话三级 | 国内精品视频666| 丰满白嫩尤物一区二区| 成人精品免费网站| 在线精品视频小说1| 欧美精品在线一区二区| 精品国产乱码久久久久久久| 中文字幕不卡的av| 一区二区三区免费观看| 日本成人在线网站| 国产传媒一区在线| 91国产免费观看| 欧美一区二区三区性视频| 国产午夜精品久久| 亚洲综合一区二区精品导航| 五月激情丁香一区二区三区| 麻豆精品久久精品色综合| kk眼镜猥琐国模调教系列一区二区| 欧美在线三级电影| 精品国产乱码久久久久久牛牛 | 免费av成人在线| 成人激情小说网站| 欧美日韩成人一区| 国产三区在线成人av| 亚洲高清视频中文字幕| 国产一区二区视频在线| 日本高清不卡一区| 久久精品一区四区| 五月天激情小说综合| 国产成人免费9x9x人网站视频| 欧美影片第一页| 久久久久久久电影| 亚洲国产欧美一区二区三区丁香婷| 国产一区在线看| 欧美高清视频在线高清观看mv色露露十八 | 欧美日韩国产在线观看| 国产欧美综合在线观看第十页| 亚洲成人手机在线| 丰满少妇在线播放bd日韩电影| 这里只有精品视频在线观看| 国产精品久久久久久久第一福利| 久久狠狠亚洲综合| 欧美精品三级日韩久久| 亚洲女子a中天字幕| 国产91精品免费| 欧美成人vps| 男女男精品视频网| 欧美情侣在线播放| 亚洲在线观看免费视频| 成人午夜精品一区二区三区| 久久综合中文字幕| 免费观看成人鲁鲁鲁鲁鲁视频| 91老师国产黑色丝袜在线| 国产亚洲成aⅴ人片在线观看| 麻豆精品精品国产自在97香蕉| 欧美系列日韩一区| 尤物av一区二区| 91天堂素人约啪| 亚洲免费伊人电影| 99国产精品久| 专区另类欧美日韩| 99精品视频一区| 亚洲免费在线观看| 91久久精品一区二区三| 日韩毛片一二三区| 一本一道综合狠狠老| 亚洲免费av网站| 在线观看区一区二| 亚洲精品国产第一综合99久久| 91伊人久久大香线蕉| 一区二区久久久| 欧美少妇bbb|