本文整理汇总了C++中idHashIndex::Next方法的典型用法代码示例。如果您正苦于以下问题:C++ idHashIndex::Next方法的具体用法?C++ idHashIndex::Next怎么用?C++ idHashIndex::Next使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类idHashIndex
的用法示例。
在下文中一共展示了idHashIndex::Next方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/*
============
idCVarSystemLocal::FindInternal
============
*/
idInternalCVar *idCVarSystemLocal::FindInternal( const char *name ) const {
int hash = cvarHash.GenerateKey( name, false );
for ( int i = cvarHash.First( hash ); i != -1; i = cvarHash.Next( i ) ) {
if ( cvars[i]->nameString.Icmp( name ) == 0 ) {
return cvars[i];
}
}
return NULL;
}
示例2: AllocTraceModel
/*
===============
idClipModel::AllocTraceModel
===============
*/
int idClipModel::AllocTraceModel( const idTraceModel &trm ) {
int i, hashKey, traceModelIndex;
trmCache_t *entry;
hashKey = GetTraceModelHashKey( trm );
for( i = traceModelHash.First( hashKey ); i >= 0; i = traceModelHash.Next( i ) ) {
if( traceModelCache[i]->trm == trm ) {
traceModelCache[i]->refCount++;
return i;
}
}
entry = new trmCache_t;
entry->trm = trm;
entry->trm.GetMassProperties( 1.0f, entry->volume, entry->centerOfMass, entry->inertiaTensor );
entry->refCount = 1;
traceModelIndex = traceModelCache.Append( entry );
traceModelHash.Add( hashKey, traceModelIndex );
return traceModelIndex;
}
示例3: if
/*
=================
idRenderModelManagerLocal::GetModel
=================
*/
idRenderModel *idRenderModelManagerLocal::GetModel( const char *modelName, bool createIfNotFound ) {
idStr canonical;
idStr extension;
if ( !modelName || !modelName[0] ) {
return NULL;
}
canonical = modelName;
canonical.ToLower();
// see if it is already present
int key = hash.GenerateKey( modelName, false );
for ( int i = hash.First( key ); i != -1; i = hash.Next( i ) ) {
idRenderModel *model = models[i];
if ( canonical.Icmp( model->Name() ) == 0 ) {
if ( !model->IsLoaded() ) {
// reload it if it was purged
model->LoadModel();
} else if ( insideLevelLoad && !model->IsLevelLoadReferenced() ) {
// we are reusing a model already in memory, but
// touch all the materials to make sure they stay
// in memory as well
model->TouchData();
}
model->SetLevelLoadReferenced( true );
return model;
}
}
// see if we can load it
// determine which subclass of idRenderModel to initialize
idRenderModel *model;
canonical.ExtractFileExtension( extension );
if ( ( extension.Icmp( "ase" ) == 0 ) || ( extension.Icmp( "lwo" ) == 0 ) || ( extension.Icmp( "flt" ) == 0 ) || ( extension.Icmp( "obj" ) == 0 ) ) {
model = new idRenderModelStatic;
model->InitFromFile( modelName );
} else if ( extension.Icmp( "ma" ) == 0 ) {
model = new idRenderModelStatic;
model->InitFromFile( modelName );
} else if ( extension.Icmp( MD5_MESH_EXT ) == 0 ) {
model = new idRenderModelMD5;
model->InitFromFile( modelName );
} else if ( extension.Icmp( "md3" ) == 0 ) {
model = new idRenderModelMD3;
model->InitFromFile( modelName );
} else if ( extension.Icmp( "prt" ) == 0 ) {
model = new idRenderModelPrt;
model->InitFromFile( modelName );
} else if ( extension.Icmp( "liquid" ) == 0 ) {
model = new idRenderModelLiquid;
model->InitFromFile( modelName );
} else {
if ( extension.Length() ) {
common->Warning( "unknown model type '%s'", canonical.c_str() );
}
if ( !createIfNotFound ) {
return NULL;
}
idRenderModelStatic *smodel = new idRenderModelStatic;
smodel->InitEmpty( modelName );
smodel->MakeDefaultModel();
model = smodel;
}
model->SetLevelLoadReferenced( true );
if ( !createIfNotFound && model->IsDefaultModel() ) {
delete model;
model = NULL;
return NULL;
}
AddModel( model );
return model;
}
示例4: GetModel
/*
=================
idRenderModelManagerLocal::GetModel
=================
*/
idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool createIfNotFound )
{
if( !_modelName || !_modelName[0] )
{
return NULL;
}
idStrStatic< MAX_OSPATH > canonical = _modelName;
canonical.ToLower();
idStrStatic< MAX_OSPATH > extension;
canonical.ExtractFileExtension( extension );
// see if it is already present
int key = hash.GenerateKey( canonical, false );
for( int i = hash.First( key ); i != -1; i = hash.Next( i ) )
{
idRenderModel* model = models[i];
if( canonical.Icmp( model->Name() ) == 0 )
{
if( !model->IsLoaded() )
{
// reload it if it was purged
idStr generatedFileName = "generated/rendermodels/";
generatedFileName.AppendPath( canonical );
generatedFileName.SetFileExtension( va( "b%s", extension.c_str() ) );
if( model->SupportsBinaryModel() && r_binaryLoadRenderModels.GetBool() )
{
idFileLocal file( fileSystem->OpenFileReadMemory( generatedFileName ) );
model->PurgeModel();
if( !model->LoadBinaryModel( file, 0 ) )
{
model->LoadModel();
}
}
else
{
model->LoadModel();
}
}
else if( insideLevelLoad && !model->IsLevelLoadReferenced() )
{
// we are reusing a model already in memory, but
// touch all the materials to make sure they stay
// in memory as well
model->TouchData();
}
model->SetLevelLoadReferenced( true );
return model;
}
}
// see if we can load it
// determine which subclass of idRenderModel to initialize
idRenderModel* model = NULL;
if( ( extension.Icmp( "ase" ) == 0 ) || ( extension.Icmp( "lwo" ) == 0 ) || ( extension.Icmp( "flt" ) == 0 ) || ( extension.Icmp( "ma" ) == 0 ) )
{
model = new( TAG_MODEL ) idRenderModelStatic;
}
else if( extension.Icmp( MD5_MESH_EXT ) == 0 )
{
model = new( TAG_MODEL ) idRenderModelMD5;
}
else if( extension.Icmp( "md3" ) == 0 )
{
model = new( TAG_MODEL ) idRenderModelMD3;
}
else if( extension.Icmp( "prt" ) == 0 )
{
model = new( TAG_MODEL ) idRenderModelPrt;
}
else if( extension.Icmp( "liquid" ) == 0 )
{
model = new( TAG_MODEL ) idRenderModelLiquid;
}
idStrStatic< MAX_OSPATH > generatedFileName;
if( model != NULL )
{
generatedFileName = "generated/rendermodels/";
generatedFileName.AppendPath( canonical );
generatedFileName.SetFileExtension( va( "b%s", extension.c_str() ) );
// Get the timestamp on the original file, if it's newer than what is stored in binary model, regenerate it
ID_TIME_T sourceTimeStamp = fileSystem->GetTimestamp( canonical );
idFileLocal file( fileSystem->OpenFileReadMemory( generatedFileName ) );
//.........这里部分代码省略.........
示例5: AllocTraceModel
/*
===============
idClipModel::AllocTraceModel
===============
*/
int idClipModel::AllocTraceModel( const idTraceModel& trm, bool persistantThroughSaves )
{
int i, hashKey, traceModelIndex;
trmCache_t* entry;
hashKey = GetTraceModelHashKey( trm );
if( persistantThroughSaves )
{
// Look Inside the saved list.
for( i = traceModelHash.First( hashKey ); i >= 0; i = traceModelHash.Next( i ) )
{
if( traceModelCache[i]->trm == trm )
{
traceModelCache[i]->refCount++;
int flagged_index = i | TRACE_MODEL_SAVED;
return flagged_index;
}
}
}
else
{
// Look inside the unsaved list.
for( i = traceModelHash_Unsaved.First( hashKey ); i >= 0; i = traceModelHash_Unsaved.Next( i ) )
{
if( traceModelCache_Unsaved[i]->trm == trm )
{
traceModelCache_Unsaved[i]->refCount++;
return i;
}
}
}
entry = new( TAG_PHYSICS_CLIP ) trmCache_t;
entry->trm = trm;
entry->trm.GetMassProperties( 1.0f, entry->volume, entry->centerOfMass, entry->inertiaTensor );
entry->refCount = 1;
if( persistantThroughSaves )
{
traceModelIndex = traceModelCache.Append( entry );
traceModelHash.Add( hashKey, traceModelIndex );
// Set the saved bit.
traceModelIndex |= TRACE_MODEL_SAVED;
}
else
{
traceModelIndex = traceModelCache_Unsaved.Append( entry );
traceModelHash_Unsaved.Add( hashKey, traceModelIndex );
// remove the saved bit
traceModelIndex &= ~TRACE_MODEL_SAVED;
}
return traceModelIndex;
}