Skip to content

Commit 7968f7e

Browse files
authored
Replace vector::at with indexing when bounds checks are unneeded (#2305)
In several places, where the variable was a pointer to `std::vector`, the code used `->at(x)` to fetch elements, most probably for the syntax convenience. However, `at()` is always bounds checked, unlike `operator[]` which is bounds checked only in debug mode. This makes `at()` slightly less efficient where performance matters, and if the bounds checking is not desired, using `(*vectorPtr)[x]` pattern makes the code slightly faster.
1 parent dd61558 commit 7968f7e

4 files changed

Lines changed: 5 additions & 5 deletions

File tree

source/MaterialXGenOsl/OslShaderGenerator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ ShaderPtr OslShaderGenerator::generate(const string& name, ElementPtr element, G
112112
{
113113
for (size_t j = 0; j < metadata->size(); ++j)
114114
{
115-
const ShaderMetadata& data = metadata->at(j);
115+
const ShaderMetadata& data = (*metadata)[j];
116116
const string& delim = (j == metadata->size() - 1) ? EMPTY_STRING : Syntax::COMMA;
117117
const string& dataType = _syntax->getTypeName(data.type);
118118
const string dataValue = _syntax->getValue(data.type, *data.value, true);
@@ -487,7 +487,7 @@ void OslShaderGenerator::emitMetadata(const ShaderPort* port, ShaderStage& stage
487487
{
488488
for (size_t j = 0; j < metadata->size(); ++j)
489489
{
490-
const ShaderMetadata& data = metadata->at(j);
490+
const ShaderMetadata& data = (*metadata)[j];
491491
if (METADATA_TYPE_BLACKLIST.count(data.type) == 0)
492492
{
493493
const string& delim = (widgetMetadata || j < metadata->size() - 1) ? Syntax::COMMA : EMPTY_STRING;

source/MaterialXGenShader/TypeDesc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ValuePtr TypeDesc::createValueFromStrings(const string& value) const
4444
AggregateValuePtr result = AggregateValue::createAggregateValue(getName());
4545
for (size_t i = 0; i < structMembers->size(); ++i)
4646
{
47-
result->appendValue(structMembers->at(i).getType().createValueFromStrings(subValues[i]));
47+
result->appendValue((*structMembers)[i].getType().createValueFromStrings(subValues[i]));
4848
}
4949

5050
return result;

source/MaterialXRenderGlsl/GlslProgram.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@ const GlslProgram::InputMap& GlslProgram::updateUniformsList()
10141014

10151015
for (size_t i = 0, n = variableStructMembers->size(); i < n; ++i)
10161016
{
1017-
const auto& structMember = variableStructMembers->at(i);
1017+
const auto& structMember = (*variableStructMembers)[i];
10181018
auto memberVariableName = variableName + "." + structMember.getName();
10191019
auto memberVariableValue = aggregateValue->getMemberValue(i);
10201020

source/MaterialXRenderMsl/MslPipelineStateObject.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,7 @@ int GetStrideOfMetalType(MTLDataType type)
10981098
const auto& members = variableTypeDesc.getStructMembers();
10991099
for (size_t i = 0, n = members->size(); i < n; ++i)
11001100
{
1101-
const auto& structMember = members->at(i);
1101+
const auto& structMember = (*members)[i];
11021102
auto memberVariableName = variableName + "." + structMember.getName();
11031103
auto memberVariableValue = aggregateValue->getMemberValue(i);
11041104

0 commit comments

Comments
 (0)