Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/Body/BodyAccess.h
9912 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#pragma once56#ifdef JPH_ENABLE_ASSERTS78JPH_NAMESPACE_BEGIN910class JPH_EXPORT BodyAccess11{12public:13/// Access rules, used to detect race conditions during simulation14enum class EAccess : uint815{16None = 0,17Read = 1,18ReadWrite = 3,19};2021/// Grant a scope specific access rights on the current thread22class Grant23{24public:25inline Grant(EAccess inVelocity, EAccess inPosition)26{27EAccess &velocity = sVelocityAccess();28EAccess &position = sPositionAccess();2930JPH_ASSERT(velocity == EAccess::ReadWrite);31JPH_ASSERT(position == EAccess::ReadWrite);3233velocity = inVelocity;34position = inPosition;35}3637inline ~Grant()38{39sVelocityAccess() = EAccess::ReadWrite;40sPositionAccess() = EAccess::ReadWrite;41}42};4344/// Check if we have permission45static inline bool sCheckRights(EAccess inRights, EAccess inDesiredRights)46{47return (uint8(inRights) & uint8(inDesiredRights)) == uint8(inDesiredRights);48}4950/// Access to read/write velocities51static inline EAccess & sVelocityAccess()52{53static thread_local EAccess sAccess = BodyAccess::EAccess::ReadWrite;54return sAccess;55}5657/// Access to read/write positions58static inline EAccess & sPositionAccess()59{60static thread_local EAccess sAccess = BodyAccess::EAccess::ReadWrite;61return sAccess;62}63};6465JPH_NAMESPACE_END6667#endif // JPH_ENABLE_ASSERTS686970