本文整理汇总了C++中HashMap::Contains方法的典型用法代码示例。如果您正苦于以下问题:C++ HashMap::Contains方法的具体用法?C++ HashMap::Contains怎么用?C++ HashMap::Contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HashMap
的用法示例。
在下文中一共展示了HashMap::Contains方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GenerateNameFromType
static String GenerateNameFromType(ShortStringHash typeHash)
{
if (unknownTypeToName.Contains(typeHash))
return unknownTypeToName[typeHash];
String test;
// Begin brute-force search
unsigned numLetters = letters.Length();
unsigned combinations = numLetters;
bool found = false;
for (unsigned i = 1; i < 6; ++i)
{
test.Resize(i);
for (unsigned j = 0; j < combinations; ++j)
{
unsigned current = j;
for (unsigned k = 0; k < i; ++k)
{
test[k] = letters[current % numLetters];
current /= numLetters;
}
if (ShortStringHash(test) == typeHash)
{
found = true;
break;
}
}
if (found)
break;
combinations *= numLetters;
}
unknownTypeToName[typeHash] = test;
return test;
}
示例2: CloneGeometries
void AnimatedModel::CloneGeometries()
{
const Vector<SharedPtr<VertexBuffer> >& originalVertexBuffers = model_->GetVertexBuffers();
HashMap<VertexBuffer*, SharedPtr<VertexBuffer> > clonedVertexBuffers;
morphVertexBuffers_.Resize(originalVertexBuffers.Size());
for (unsigned i = 0; i < originalVertexBuffers.Size(); ++i)
{
VertexBuffer* original = originalVertexBuffers[i];
if (model_->GetMorphRangeCount(i))
{
SharedPtr<VertexBuffer> clone(new VertexBuffer(context_));
clone->SetShadowed(true);
clone->SetSize(original->GetVertexCount(), morphElementMask_ & original->GetElementMask(), true);
void* dest = clone->Lock(0, original->GetVertexCount());
if (dest)
{
CopyMorphVertices(dest, original->GetShadowData(), original->GetVertexCount(), clone, original);
clone->Unlock();
}
clonedVertexBuffers[original] = clone;
morphVertexBuffers_[i] = clone;
}
else
morphVertexBuffers_[i].Reset();
}
// Geometries will always be cloned fully. They contain only references to buffer, so they are relatively light
for (unsigned i = 0; i < geometries_.Size(); ++i)
{
for (unsigned j = 0; j < geometries_[i].Size(); ++j)
{
SharedPtr<Geometry> original = geometries_[i][j];
SharedPtr<Geometry> clone(new Geometry(context_));
// Add an additional vertex stream into the clone, which supplies only the morphable vertex data, while the static
// data comes from the original vertex buffer(s)
const Vector<SharedPtr<VertexBuffer> >& originalBuffers = original->GetVertexBuffers();
unsigned totalBuf = originalBuffers.Size();
for (unsigned k = 0; k < originalBuffers.Size(); ++k)
{
VertexBuffer* originalBuffer = originalBuffers[k];
if (clonedVertexBuffers.Contains(originalBuffer))
++totalBuf;
}
clone->SetNumVertexBuffers(totalBuf);
unsigned l = 0;
for (unsigned k = 0; k < originalBuffers.Size(); ++k)
{
VertexBuffer* originalBuffer = originalBuffers[k];
if (clonedVertexBuffers.Contains(originalBuffer))
{
VertexBuffer* clonedBuffer = clonedVertexBuffers[originalBuffer];
clone->SetVertexBuffer(l++, originalBuffer);
// Specify the morph buffer at a greater index to override the model's original positions/normals/tangents
clone->SetVertexBuffer(l++, clonedBuffer);
}
else
clone->SetVertexBuffer(l++, originalBuffer);
}
clone->SetIndexBuffer(original->GetIndexBuffer());
clone->SetDrawRange(original->GetPrimitiveType(), original->GetIndexStart(), original->GetIndexCount());
clone->SetLodDistance(original->GetLodDistance());
geometries_[i][j] = clone;
}
}
// Make sure the rendering batches use the new cloned geometries
ResetLodLevels();
MarkMorphsDirty();
}
示例3: LoadMesh
//.........这里部分代码省略.........
{
bones_[bone].collisionMask_ |= 1;
bones_[bone].radius_ = distance;
}
// Build the hitbox for the bone
bones_[bone].boundingBox_.Merge(bones_[bone].inverseWorldTransform_ * (vertexPos));
bones_[bone].collisionMask_ |= 2;
}
}
boneAssignment = boneAssignment.GetNext("vertexboneassignment");
}
}
if ((subGeometryLodLevel.boneWeights_.Size()) && bones_.Size())
{
vBuf->elementMask_ |= MASK_BLENDWEIGHTS | MASK_BLENDINDICES;
bool sorted = false;
// If amount of bones is larger than supported by HW skinning, must remap per submesh
if (bones_.Size() > maxBones_)
{
HashMap<unsigned, unsigned> usedBoneMap;
unsigned remapIndex = 0;
for (HashMap<unsigned, PODVector<BoneWeightAssignment> >::Iterator i =
subGeometryLodLevel.boneWeights_.Begin(); i != subGeometryLodLevel.boneWeights_.End(); ++i)
{
// Sort the bone assigns by weight
Sort(i->second_.Begin(), i->second_.End(), CompareWeights);
// Use only the first 4 weights
for (unsigned j = 0; j < i->second_.Size() && j < 4; ++j)
{
unsigned originalIndex = i->second_[j].boneIndex_;
if (!usedBoneMap.Contains(originalIndex))
{
usedBoneMap[originalIndex] = remapIndex;
remapIndex++;
}
i->second_[j].boneIndex_ = usedBoneMap[originalIndex];
}
}
// If still too many bones in one subgeometry, error
if (usedBoneMap.Size() > maxBones_)
ErrorExit("Too many bones (limit " + String(maxBones_) + ") in submesh " + String(subMeshIndex + 1));
// Write mapping of vertex buffer bone indices to original bone indices
subGeometryLodLevel.boneMapping_.Resize(usedBoneMap.Size());
for (HashMap<unsigned, unsigned>::Iterator j = usedBoneMap.Begin(); j != usedBoneMap.End(); ++j)
subGeometryLodLevel.boneMapping_[j->second_] = j->first_;
sorted = true;
}
for (HashMap<unsigned, PODVector<BoneWeightAssignment> >::Iterator i = subGeometryLodLevel.boneWeights_.Begin();
i != subGeometryLodLevel.boneWeights_.End(); ++i)
{
// Sort the bone assigns by weight, if not sorted yet in bone remapping pass
if (!sorted)
Sort(i->second_.Begin(), i->second_.End(), CompareWeights);
float totalWeight = 0.0f;
float normalizationFactor = 0.0f;
// Calculate normalization factor in case there are more than 4 blend weights, or they do not add up to 1
for (unsigned j = 0; j < i->second_.Size() && j < 4; ++j)
示例4: Load
void JSBModule::Load(const String &moduleJSONFilename)
{
ResourceCache* cache = JSBind::context_->GetSubsystem<ResourceCache>();
JSONFile* moduleJSONFile = cache->GetResource<JSONFile>(moduleJSONFilename);
if (!moduleJSONFile)
{
LOGERRORF("Couldn't load module json: %s", moduleJSONFilename.CString());
ErrorExit("Couldn't load module json");
}
JSONValue moduleJSON = moduleJSONFile->GetRoot();
JSONValue sources = moduleJSON.GetChild("sources");
JSONValue classes = moduleJSON.GetChild("classes");
JSONValue includes = moduleJSON.GetChild("includes");
JSONValue classes_rename = moduleJSON.GetChild("classes_rename");
JSONValue overloads = moduleJSON.GetChild("overloads");
JSONValue requires = moduleJSON.GetChild("requires");
HashMap<String, String> rename;
if (requires.IsArray())
{
for (unsigned j = 0; j < requires.GetSize(); j++)
{
requirements_.Push(requires.GetString(j));
}
}
if (classes_rename.IsObject())
{
Vector<String> childNames = classes_rename.GetValueNames();
for (unsigned j = 0; j < childNames.Size(); j++)
{
String classname = childNames.At(j);
String crename = classes_rename.GetString(classname);
rename[classname] = crename;
}
}
if (includes.IsArray())
{
for (unsigned j = 0; j < includes.GetSize(); j++)
{
includes_.Push(includes.GetString(j));
}
}
if (classes.IsArray())
{
for (unsigned j = 0; j < classes.GetSize(); j++)
{
String classname = classes.GetString(j);
if (rename.Contains(classname))
bindings_->RegisterClass(classname, rename[classname]);
else
bindings_->RegisterClass(classname);
}
}
if (overloads.IsObject())
{
Vector<String> childNames = overloads.GetChildNames();
for (unsigned j = 0; j < childNames.Size(); j++)
{
String classname = childNames.At(j);
JSBClass* klass = bindings_->GetClass(classname);
if (!klass)
{
ErrorExit("Bad overload klass");
}
JSONValue classoverloads = overloads.GetChild(classname);
Vector<String> functionNames = classoverloads.GetChildNames();
for (unsigned k = 0; k < functionNames.Size(); k++)
{
JSONValue sig = classoverloads.GetChild(functionNames[k]);
if (!sig.IsArray())
{
ErrorExit("Bad overload defintion");
}
Vector<String> values;
for (unsigned x = 0; x < sig.GetSize(); x++)
{
values.Push(sig.GetString(x));
}
//.........这里部分代码省略.........