UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AtomicFlags.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include <atomic>
6
7namespace UE
8{
9
10template <typename FlagType>
12{
13 using UnderlyingType = __underlying_type(FlagType);
14
15public:
16 FlagType Add(FlagType FlagsToAdd, std::memory_order Order = std::memory_order_seq_cst)
17 {
18 return (FlagType)Flags.fetch_or((UnderlyingType)FlagsToAdd, Order);
19 }
20
21 FlagType Remove(FlagType FlagsToAdd, std::memory_order Order = std::memory_order_seq_cst)
22 {
23 return (FlagType)Flags.fetch_and(~((UnderlyingType)FlagsToAdd), Order);
24 }
25
26 bool HasAny(FlagType Contains, std::memory_order Order = std::memory_order_seq_cst)
27 {
28 return (Flags.load(Order) & (UnderlyingType)Contains) != 0;
29 }
30
31 FlagType Get(std::memory_order Order = std::memory_order_seq_cst) const
32 {
33 return (FlagType)Flags.load(Order);
34 }
35
36 bool TrySet(FlagType FlagsToSet, std::memory_order Order = std::memory_order_seq_cst)
37 {
38 UnderlyingType Expected = Flags.load(Order);
39 return Flags.compare_exchange_strong(Expected, (UnderlyingType)FlagsToSet);
40 }
41
42private:
43 std::atomic<UnderlyingType> Flags{0};
44};
45
46} // namespace UE
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition AtomicFlags.h:12
FlagType Add(FlagType FlagsToAdd, std::memory_order Order=std::memory_order_seq_cst)
Definition AtomicFlags.h:16
FlagType Get(std::memory_order Order=std::memory_order_seq_cst) const
Definition AtomicFlags.h:31
bool TrySet(FlagType FlagsToSet, std::memory_order Order=std::memory_order_seq_cst)
Definition AtomicFlags.h:36
FlagType Remove(FlagType FlagsToAdd, std::memory_order Order=std::memory_order_seq_cst)
Definition AtomicFlags.h:21
bool HasAny(FlagType Contains, std::memory_order Order=std::memory_order_seq_cst)
Definition AtomicFlags.h:26
Definition AdvancedWidgetsModule.cpp:13