Added a new ScopedValue utility class that simply sets a value when it goes out of scope. This is particularly handy for flags that track whether the callstack is inside a particular scope, like a m_isInitializing flag.
Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>monroegm-disable-blank-issue-2
parent
4c1c2d6f6b
commit
2c55ea574d
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AzCore/std/functional.h>
|
||||||
|
|
||||||
|
namespace AZ
|
||||||
|
{
|
||||||
|
//! Sets a variable upon construction and again when the object goes out of scope.
|
||||||
|
template<typename T>
|
||||||
|
class ScopedValue
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
T* m_ptr;
|
||||||
|
T m_finalValue;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ScopedValue(T* ptr, T initialValue, T finalValue)
|
||||||
|
{
|
||||||
|
m_ptr = ptr;
|
||||||
|
*m_ptr = initialValue;
|
||||||
|
m_finalValue = finalValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
~ScopedValue()
|
||||||
|
{
|
||||||
|
*m_ptr = m_finalValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace AZ
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <AtomCore/Utils/ScopedValue.h>
|
||||||
|
#include <AzCore/UnitTest/TestTypes.h>
|
||||||
|
|
||||||
|
namespace UnitTest
|
||||||
|
{
|
||||||
|
TEST(ScopedValueTest, TestBoolValue)
|
||||||
|
{
|
||||||
|
bool localValue = false;
|
||||||
|
|
||||||
|
{
|
||||||
|
AZ::ScopedValue<bool> scopedValue(&localValue, true, false);
|
||||||
|
EXPECT_EQ(true, localValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECT_EQ(false, localValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ScopedValueTest, TestIntValue)
|
||||||
|
{
|
||||||
|
int localValue = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
AZ::ScopedValue<int> scopedValue(&localValue, 1, 2);
|
||||||
|
EXPECT_EQ(1, localValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECT_EQ(2, localValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue