feat(templates): add TScopeCallback TGuardValue and TScopeCounter

This commit is contained in:
2023-01-02 21:49:24 +08:00
parent 0709f209c8
commit 96ecd33c16
4 changed files with 223 additions and 0 deletions

View File

@ -24,6 +24,7 @@ void TestTemplates()
TestTuple();
TestFunction();
TestAtomic();
TestScopeHelper();
TestMiscTemplates();
}
@ -1381,6 +1382,93 @@ void TestAtomic()
}
}
void TestScopeHelper()
{
{
int32 CheckNum = 0;
{
TScopeCallback ScopeCallback([&]() { CheckNum = 2; });
always_check(CheckNum == 0);
CheckNum = 1;
always_check(CheckNum == 1);
}
always_check(CheckNum == 2);
}
{
int32 CheckNum = 0;
{
TScopeCallback ScopeCallback([&]() { CheckNum = 2; });
always_check(CheckNum == 0);
CheckNum = 1;
always_check(CheckNum == 1);
ScopeCallback.Release();
}
always_check(CheckNum == 1);
}
{
int32 CheckNum = 0;
{
TScopeCallback ScopeCallbackA([&]() { CheckNum = 2; });
TScopeCallback ScopeCallbackB(MoveTemp(ScopeCallbackA));
always_check(CheckNum == 0);
CheckNum = 1;
always_check(CheckNum == 1);
}
always_check(CheckNum == 2);
}
{
int32 CheckNum = 1;
{
TGuardValue GuardValue(CheckNum);
CheckNum = 2;
always_check(CheckNum == 2);
}
always_check(CheckNum == 1);
}
{
int32 CheckNum = 1;
{
TGuardValue GuardValue(CheckNum, 2);
always_check(CheckNum == 2);
}
always_check(CheckNum == 1);
}
{
int32 CheckNum = 1;
{
TGuardValue GuardValue(CheckNum, 2);
always_check(CheckNum == 2);
GuardValue.Release();
}
always_check(CheckNum == 2);
}
{
int32 CheckNum = 1;
{
TGuardValue GuardValueA(CheckNum, 2);
TGuardValue GuardValueB(MoveTemp(GuardValueA));
always_check(CheckNum == 2);
}
always_check(CheckNum == 1);
}
{
int32 CheckNum = 1;
{
TScopeCounter GuardValue(CheckNum);
always_check(CheckNum == 2);
}
always_check(CheckNum == 1);
}
}
NAMESPACE_UNNAMED_BEGIN
template <typename T>