AZStd::basic_string improvements (#6438)
* AZStd::basic_string improvements The AZStd::basic_string class has a better implementation of the Short String Optimization, which increases the amount of characters that can be stored in a `basic_string<char>` from 15 characters to 22 characters(not-including null-terminating characters). For a `basic_string<wchar_t>` on Windows the amount of characters that can be stored increases from 7 to 10. Using `basic_string<wchar_t>` on Unix platforms SSO character amount from 3 to 4 characters. An additional benefit is that the size of the AZStd::basic_string class has been reduced from 40 bytes to 32 bytes when using the AZStd::allocator. When using a stateless allocator with no non static data members such as AZStd::stateless_allocator, the size of the AZStd::basic_string is 24 bytes. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Corrected comments and updated type alias to usings for AZStd::basic_string Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added Benchmarks for the basic_string and basic_fixed_string class The benchmarks currently measure the speed of the `assign` overloads. A benchmark has also been added to compare the speed swapping two `basic_string` instances by 3 memcpy vs 3 pointer swap operations Speed up string operation when in the iterator overload cases of the `assign`, `append`, `insert` and `replace` function. The code was always performing the logic to copy over a string that is overlapping, without actually checking if the string was overlapping in the first place. Added an `az_builtin_is_constant_evaluated` macro that allows use of the C++20 `std::is_constant_evaluated` feature to determine if an operation is being performed at compile time vs run time. That macro is being used to speed up the char_trait operations at run time, by using the faster standard library functions. For example char_traits::move now uses "memmove" at runtime, instead of a for loop. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Simplified string logic in AWSMetricsServiceApiTest. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
7c88f20e1e
commit
098005afbc
@@ -72,12 +72,11 @@ namespace AWSCoreUnitTest
|
||||
AWSCore::RequestBuilder requestBuilder{};
|
||||
EXPECT_TRUE(request.parameters.BuildRequest(requestBuilder));
|
||||
std::shared_ptr<Aws::StringStream> bodyContent = requestBuilder.GetBodyContent();
|
||||
EXPECT_TRUE(bodyContent != nullptr);
|
||||
EXPECT_NE(nullptr, bodyContent);
|
||||
|
||||
AZStd::string bodyString;
|
||||
std::istreambuf_iterator<AZStd::string::value_type> eos;
|
||||
bodyString = AZStd::string{ std::istreambuf_iterator<AZStd::string::value_type>(*bodyContent), eos };
|
||||
AZ_Printf("AWSAttributionServiceApiTest", bodyString.c_str());
|
||||
EXPECT_TRUE(bodyString.find(AZStd::string::format("{\"%s\":\"1.1\"", AwsAttributionAttributeKeyVersion)) != AZStd::string::npos);
|
||||
AZStd::string bodyString{ std::istreambuf_iterator<AZStd::string::value_type>(*bodyContent), eos };
|
||||
AZ_Printf("AWSAttributionServiceApiTest", "%s", bodyString.c_str());
|
||||
EXPECT_TRUE(bodyString.contains(AZStd::string::format("{\"%s\":\"1.1\"", AwsAttributionAttributeKeyVersion)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,11 +100,10 @@ namespace AWSMetrics
|
||||
AWSCore::RequestBuilder requestBuilder{};
|
||||
EXPECT_TRUE(request.parameters.BuildRequest(requestBuilder));
|
||||
std::shared_ptr<Aws::StringStream> bodyContent = requestBuilder.GetBodyContent();
|
||||
EXPECT_TRUE(bodyContent != nullptr);
|
||||
ASSERT_NE(nullptr, bodyContent);
|
||||
|
||||
AZStd::string bodyString;
|
||||
std::istreambuf_iterator<AZStd::string::value_type> eos;
|
||||
bodyString = AZStd::string{ std::istreambuf_iterator<AZStd::string::value_type>(*bodyContent), eos };
|
||||
EXPECT_TRUE(bodyString.find(AZStd::string::format("{\"%s\":[{\"event_timestamp\":", AwsMetricsRequestParameterKeyEvents)) != AZStd::string::npos);
|
||||
AZStd::string bodyString{ std::istreambuf_iterator<AZStd::string::value_type>(*bodyContent), eos };
|
||||
EXPECT_TRUE(bodyString.contains(AZStd::string::format("{\"%s\":[{\"event_timestamp\":", AwsMetricsRequestParameterKeyEvents)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace EMotionFX
|
||||
for (int i = 0; i < params.m_numStates; ++i)
|
||||
{
|
||||
AnimGraphNode* state = aznew AnimGraphMotionNode();
|
||||
state->SetName(AZStd::string(1, startChar + i).c_str());
|
||||
state->SetName(AZStd::string(1, static_cast<char>(startChar + i)).c_str());
|
||||
m_rootStateMachine->AddChildNode(state);
|
||||
AddTransitionWithTimeCondition(prevState, state, /*blendTime*/params.m_transitionBlendTime, /*countDownTime*/params.m_conditionCountDownTime);
|
||||
prevState = state;
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace EMotionFX
|
||||
for (int i = 0; i < param.m_numStates; ++i)
|
||||
{
|
||||
AnimGraphBindPoseNode* state = aznew AnimGraphBindPoseNode();
|
||||
state->SetName(AZStd::string(1, startChar + i).c_str());
|
||||
state->SetName(AZStd::string(1, static_cast<char>(startChar + i)).c_str());
|
||||
m_rootStateMachine->AddChildNode(state);
|
||||
AddTransitionWithTimeCondition(prevState, state, /*blendTime*/param.m_blendTime, /*countDownTime*/param.m_countDownTime);
|
||||
prevState = state;
|
||||
|
||||
Reference in New Issue
Block a user