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

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

?? container.h

?? this keik game source
?? H
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/container.h                      $
// $Revision:: 17                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 10/25/98 11:53p                                                $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/container.h                           $
// 
// 17    10/25/98 11:53p Jimdose
// added EXPORT_TEMPLATE
// 
// 16    10/07/98 11:45p Jimdose
// Added \n to dprintf's
// Made resize assert only when size was negative
// 
// 15    9/21/98 6:01p Markd
// tried putting archiving back in, but took it out again, when I realized it
// wouldn't work because the class hierarchy hasn't been created yet.
// 
// 14    9/21/98 4:21p Markd
// Put in archive functions and rewrote all archive routines
// 
// 13    8/20/98 4:42p Jimdose
// Added Sort function.
// 
// 12    7/09/98 1:40a Jimdose
// ClearObjectList now only reallocates the list if there are any objects in
// the list
// 
// 11    5/25/98 2:29p Aldie
// Fixed issues with not loading game dll
// 
// 10    3/23/98 1:33p Jimdose
// Revamped event and command system
// 
// 9     3/04/98 1:43p Jimdose
// Changed IndexOfObject so that it did a comparison instead of a memcmp
// 
// 8     3/02/98 5:27p Jimdose
// Changed Container to a template to make it more flexible
// 
// 7     2/03/98 10:51a Jimdose
// Updated to work with Quake 2 engine
// 
// 5     11/20/97 9:03p Jimdose
// Changed Container class to use entity # (int) instead of void *
// 
// 4     11/07/97 6:37p Jimdose
// Added FreeObjectList to empty the list and free up the memory.
// Changed ClearObjectList to only empty the list, but keep the memory
// allocated.
// Changed all functions from being virtual to being exported by the DLL.
// 
// 3     10/27/97 2:49p Jimdose
// Removed dependency on quakedef.h
// 
// 2     9/26/97 6:13p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// Base class for a dynamic array.  Allows adding, removing, index of,
// and finding of entries with specified value.  Originally created for 
// cataloging entities, but pointers to objects that may be removed at
// any time are bad to keep around, so only entity numbers should be
// used in the future.
// 

#ifndef __CONTAINER_H__
#define __CONTAINER_H__

#include "g_local.h"
#include <stdlib.h>

template< class Type >
class EXPORT_FROM_DLL Container
	{
	private:
		Type	*objlist;
		int	numobjects;
		int	maxobjects;

	public:
					Container();
					~Container<Type>();
		void		FreeObjectList( void );
		void		ClearObjectList( void );
		int		NumObjects( void );
		void		Resize( int maxelements );
		void		SetObjectAt( int index, Type& obj );
		int		AddObject( Type& obj );
		int		AddUniqueObject( Type& obj );
		void  	AddObjectAt( int index, Type& obj );
		int		IndexOfObject( Type& obj );
		qboolean	ObjectInList( Type& obj );
		Type&		ObjectAt( int index );
		Type		*AddressOfObjectAt( int index );
		void		RemoveObjectAt( int index );
		void		RemoveObject( Type& obj );
		void		Sort( int ( __cdecl *compare )( const void *elem1, const void *elem2 ) );
//      virtual void Archive(	Archiver &arc );
//      virtual void Unarchive( Archiver &arc );
	};
/*
template< class Type >
EXPORT_FROM_DLL void Container<Type>::Archive
	(
	Archiver &arc
	)
	{
   int i;

   arc.WriteInteger( maxobjects );
   arc.WriteInteger( numobjects );

   for ( i = 0; i < numobjects; i++ )
      {
		arc.WriteRaw( objlist[ i ], sizeof( Type ) );
      }
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::Unarchive
	(
	Archiver &arc
	)

	{
   int i;

	FreeObjectList();

   maxobjects = arc.ReadInteger();
   numobjects = arc.ReadInteger();

	objlist = new Type[ maxobjects ];
   for ( i = 0; i < numobjects; i++ )
      {
		arc.ReadRaw( &objlist[ i ], sizeof( Type ) );
      }
	}
*/

template< class Type >
Container<Type>::Container()
	{
	objlist = NULL;
	FreeObjectList();
	}

template< class Type >
Container<Type>::~Container<Type>()
	{
	FreeObjectList();
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::FreeObjectList
	(
	void
	)

	{
	if ( objlist )
		{
		delete[] objlist;
		}
	objlist = NULL;
	numobjects = 0;
	maxobjects = 0;
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::ClearObjectList
	(
	void
	)

	{
	// only delete the list if we have objects in it 
	if ( objlist && numobjects )
		{
		delete[] objlist;
		objlist = new Type[ maxobjects ];
		numobjects = 0;
		}
	}

template< class Type >
EXPORT_FROM_DLL int Container<Type>::NumObjects
	(
	void
	)

	{
	return numobjects;
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::Resize
	(
	int maxelements
	)

	{
	Type *temp;
	int i;

   assert( maxelements >= 0 );
   
   if ( maxelements <= 0 )
      {
      FreeObjectList();
      return;
      }

	if ( !objlist )
		{
		maxobjects = maxelements;
		objlist = new Type[ maxobjects ];
		}
	else
		{
		temp = objlist;
		maxobjects = maxelements;
		if ( maxobjects < numobjects )
			{
			maxobjects = numobjects;
			}

		objlist = new Type[ maxobjects ];
		for( i = 0; i < numobjects; i++ )
			{
			objlist[ i ] = temp[ i ];
			}
		delete[] temp;
		}
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::SetObjectAt
	(
	int index,
	Type& obj
	)

	{
	if ( ( index <= 0 ) || ( index > numobjects ) )
		{
		gi.error( "Container::SetObjectAt : index out of range" );
		}

	objlist[ index - 1 ] = obj;
	}

template< class Type >
EXPORT_FROM_DLL int Container<Type>::AddObject
	(
	Type& obj
	)

	{
	if ( !objlist )
		{
		Resize( 10 );
		}

	if ( numobjects == maxobjects )
		{
		Resize( maxobjects * 2 );
		}

	objlist[ numobjects ] = obj;
	numobjects++;

	return numobjects;
	}

template< class Type >
EXPORT_FROM_DLL int Container<Type>::AddUniqueObject
	(
	Type& obj
	)

	{
   int index;

   index = IndexOfObject( obj );
   if ( !index )
      index = AddObject( obj );
   return index;
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::AddObjectAt
	(
	int index,
	Type& obj
	)

	{
   //
   // this should only be used when reconstructing a list that has to be identical to the original
   //
   if ( index > maxobjects )
      {
      Resize( index );
      }
   if ( index > numobjects )
      {
      numobjects = index;
      }
   SetObjectAt( index, obj );
	}

template< class Type >
EXPORT_FROM_DLL int Container<Type>::IndexOfObject
	(
	Type& obj
	)

	{
	int i;

	for( i = 0; i < numobjects; i++ )
		{
		if ( objlist[ i ] == obj )
			{
			return i + 1;
			}
		}

	return 0;
	}

template< class Type >
EXPORT_FROM_DLL qboolean Container<Type>::ObjectInList
	(
	Type& obj
	)

	{
	if ( !IndexOfObject( obj ) )
		{
		return false;
		}

	return true;
	}

template< class Type >
EXPORT_FROM_DLL Type& Container<Type>::ObjectAt
	(
	int index
	)

	{
	if ( ( index <= 0 ) || ( index > numobjects ) )
		{
		gi.error( "Container::ObjectAt : index out of range" );
		}

	return objlist[ index - 1 ];
	}

template< class Type >
EXPORT_FROM_DLL Type * Container<Type>::AddressOfObjectAt
	(
	int index
	)

	{
   //
   // this should only be used when reconstructing a list that has to be identical to the original
   //
   if ( index > maxobjects )
      {
      gi.error( "Container::AddressOfObjectAt : index is greater than maxobjects" );
      }
   if ( index > numobjects )
      {
      numobjects = index;
      }
	return &objlist[ index - 1 ];
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::RemoveObjectAt
	(
	int index
	)

	{
	int i;

	if ( !objlist )
		{
		gi.dprintf( "Container::RemoveObjectAt : Empty list\n" );
		return;
		}

	if ( ( index <= 0 ) || ( index > numobjects ) )
		{
		gi.error( "Container::RemoveObjectAt : index out of range" );
		return;
		}

	i = index - 1;
	numobjects--;
	for( i = index - 1; i < numobjects; i++ )
		{
		objlist[ i ] = objlist[ i + 1 ];
		}
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::RemoveObject
	(
	Type& obj
	)

	{
	int index;

	index = IndexOfObject( obj );
	if ( !index )
		{
		gi.dprintf( "Container::RemoveObject : Object not in list\n" );
		return;
		}

	RemoveObjectAt( index );
	}

template< class Type >
EXPORT_FROM_DLL void Container<Type>::Sort
	(
	int ( __cdecl *compare )( const void *elem1, const void *elem2 )
	)

	{
	if ( !objlist )
		{
		gi.dprintf( "Container::RemoveObjectAt : Empty list\n" );
		return;
		}

	qsort( ( void * )objlist, ( size_t )numobjects, sizeof( Type ), compare );
	}

//
// Exported templated classes must be explicitly instantiated
//
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL Container<int>;
#endif

#endif /* container.h */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91社区在线播放| 国产亚洲欧美日韩在线一区| 成人高清免费在线播放| 欧美亚洲自拍偷拍| 精品久久国产老人久久综合| 亚洲欧美精品午睡沙发| 国产精品一品视频| 欧美日韩国产欧美日美国产精品| 久久精品欧美日韩| 国产精品自在欧美一区| 欧美日韩一区二区三区免费看| 国产精品免费久久| eeuss影院一区二区三区| 精品国产91亚洲一区二区三区婷婷| 亚洲影视在线播放| 欧美高清视频一二三区| 亚洲宅男天堂在线观看无病毒| 97久久超碰精品国产| 中文字幕欧美激情一区| 久久精品99国产精品| 亚洲黄色在线视频| 国产午夜精品理论片a级大结局 | 欧美sm美女调教| 亚洲一区二区三区免费视频| 99久久精品国产精品久久| 成人av集中营| 亚洲精品大片www| 日韩一级免费一区| 韩国女主播成人在线观看| 久久久一区二区三区捆绑**| 成人三级伦理片| 肉丝袜脚交视频一区二区| 91福利国产成人精品照片| 亚洲日本中文字幕区| 欧美精品日韩精品| 国产馆精品极品| 日韩成人av影视| 国产精品久久免费看| 日韩欧美久久一区| 欧美体内she精视频| 精品美女在线播放| 另类综合日韩欧美亚洲| 日本一区二区视频在线| 欧美性色黄大片手机版| 国产九色精品成人porny | 丝袜美腿成人在线| 亚洲日本在线看| 日本一区二区三区视频视频| 日韩午夜av电影| 欧美日韩和欧美的一区二区| 色噜噜夜夜夜综合网| caoporn国产一区二区| 久久免费精品国产久精品久久久久| 91精品福利在线一区二区三区| 国产麻豆午夜三级精品| 男女男精品网站| 五月天精品一区二区三区| 一区二区三区免费观看| 成人欧美一区二区三区1314| 1024精品合集| 一区二区三区在线视频播放| 亚洲精品ww久久久久久p站| 一区二区三区欧美在线观看| 亚洲福利一二三区| 成人午夜看片网址| 亚洲小说欧美激情另类| 亚洲欧美日韩综合aⅴ视频| 97久久精品人人爽人人爽蜜臀| 人禽交欧美网站| 国产激情一区二区三区桃花岛亚洲| 国产在线一区二区| 欧美电影在线免费观看| 久久嫩草精品久久久精品一| 国产婷婷一区二区| 亚洲一区二区视频| 精品中文字幕一区二区小辣椒| 成人午夜激情片| 欧美日韩一区三区| 国产精品素人一区二区| 亚洲高清在线视频| 成人av午夜电影| ●精品国产综合乱码久久久久 | 亚洲免费av观看| 亚洲成av人片观看| 亚洲欧美日韩在线不卡| 久久久一区二区| 亚洲人成在线播放网站岛国| 国产欧美一区二区三区在线看蜜臀 | 精品视频一区二区不卡| 精品国产一二三| 亚洲国产另类精品专区| 99精品欧美一区二区蜜桃免费| 91精品啪在线观看国产60岁| 精品成人佐山爱一区二区| 亚洲欧洲日韩女同| 日韩精品91亚洲二区在线观看| 国内精品久久久久影院色| 91国产福利在线| 中文字幕一区二区三区不卡在线 | 成人欧美一区二区三区在线播放| 日产精品久久久久久久性色| 在线观看国产一区二区| 中文乱码免费一区二区| 国产一区二区三区免费观看| 亚洲黄色小视频| 国产精品成人网| 久久超级碰视频| 樱桃国产成人精品视频| 日韩欧美在线综合网| 亚洲猫色日本管| 色综合久久久久| 亚洲视频免费看| 色综合久久综合| 亚洲成人资源在线| 在线精品视频一区二区三四| 国产精品久久久久精k8| 91在线视频免费91| 亚洲丰满少妇videoshd| 精品三级在线观看| 国产精品影视网| 亚洲欧洲色图综合| 99视频在线精品| 亚洲高清视频的网址| 欧美一区二区三区四区在线观看| 一区二区三区在线视频观看| 日韩一二在线观看| 国产裸体歌舞团一区二区| 中文字幕第一区二区| 成人一区二区三区| 亚洲人精品午夜| 国产精品一区二区视频| 一个色在线综合| 久久伊99综合婷婷久久伊| 中文字幕中文乱码欧美一区二区| 欧美日韩另类国产亚洲欧美一级| 久国产精品韩国三级视频| 国产区在线观看成人精品 | 美洲天堂一区二卡三卡四卡视频| 国产精品久久二区二区| 日韩欧美一区二区免费| 欧美无乱码久久久免费午夜一区| 久久精品国产亚洲一区二区三区| 亚洲色图色小说| 国产精品的网站| 亚洲蜜臀av乱码久久精品| 日本一区二区久久| 在线观看91精品国产麻豆| 国产精品久久一级| 久久精品一区蜜桃臀影院| 欧美不卡在线视频| 欧美日韩免费一区二区三区| av网站免费线看精品| 国产麻豆精品在线观看| 国产一区二区三区四区在线观看| 日韩专区中文字幕一区二区| 一区二区三区免费网站| 亚洲精品菠萝久久久久久久| 亚洲欧洲美洲综合色网| 国产精品高潮呻吟| 亚洲国产精品高清| 国产伦精品一区二区三区在线观看| 亚洲色图丝袜美腿| 亚洲欧洲色图综合| 中文字幕一区二区在线观看 | 在线欧美小视频| 国产91在线看| 国产suv精品一区二区6| 色综合中文字幕国产| 欧美精品乱码久久久久久| 欧美久久一二区| 欧美xxxxxxxxx| 亚洲美女淫视频| 国产精品69毛片高清亚洲| av电影一区二区| 欧美美女黄视频| 国产精品国产三级国产a| 国产精一区二区三区| 欧美美女喷水视频| 亚洲一区在线看| 99国产精品国产精品毛片| 69av一区二区三区| 日韩欧美国产精品一区| 一区二区三区四区在线播放| 国产精品77777| 欧美精选一区二区| 亚洲黄色av一区| 国产 欧美在线| 精品999久久久| 国产毛片一区二区| 《视频一区视频二区| www.欧美色图| 一区二区高清免费观看影视大全| 国产最新精品精品你懂的| 91精品国产一区二区三区蜜臀 | 亚洲视频小说图片| 色综合久久88色综合天天6| 国产精品视频第一区| 91日韩精品一区| 亚洲色图制服诱惑| 一本色道综合亚洲|