just kidding shared_mutexes are c++17

This commit is contained in:
SamGondelman 2017-08-11 10:07:20 -07:00
parent 4c55849290
commit f058781f49
4 changed files with 69 additions and 75 deletions

View file

@ -15,7 +15,7 @@ QUuid LaserPointerManager::createLaserPointer(const QVariantMap& rayProps, const
const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool enabled) { const bool faceAvatar, const bool centerEndY, const bool lockEnd, const bool enabled) {
std::shared_ptr<LaserPointer> laserPointer = std::make_shared<LaserPointer>(rayProps, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, enabled); std::shared_ptr<LaserPointer> laserPointer = std::make_shared<LaserPointer>(rayProps, renderStates, defaultRenderStates, faceAvatar, centerEndY, lockEnd, enabled);
if (!laserPointer->getRayUID().isNull()) { if (!laserPointer->getRayUID().isNull()) {
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
_laserPointersToAdd.push(std::pair<QUuid, std::shared_ptr<LaserPointer>>(id, laserPointer)); _laserPointersToAdd.push(std::pair<QUuid, std::shared_ptr<LaserPointer>>(id, laserPointer));
return id; return id;
@ -24,46 +24,46 @@ QUuid LaserPointerManager::createLaserPointer(const QVariantMap& rayProps, const
} }
void LaserPointerManager::removeLaserPointer(const QUuid uid) { void LaserPointerManager::removeLaserPointer(const QUuid uid) {
WriteLock lock(_removeLock); QWriteLocker lock(&_removeLock);
_laserPointersToRemove.push(uid); _laserPointersToRemove.push(uid);
} }
void LaserPointerManager::enableLaserPointer(const QUuid uid) { void LaserPointerManager::enableLaserPointer(const QUuid uid) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->enable(); _laserPointers[uid]->enable();
} }
} }
void LaserPointerManager::disableLaserPointer(const QUuid uid) { void LaserPointerManager::disableLaserPointer(const QUuid uid) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->disable(); _laserPointers[uid]->disable();
} }
} }
void LaserPointerManager::setRenderState(QUuid uid, const std::string& renderState) { void LaserPointerManager::setRenderState(QUuid uid, const std::string& renderState) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setRenderState(renderState); _laserPointers[uid]->setRenderState(renderState);
} }
} }
void LaserPointerManager::editRenderState(QUuid uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) { void LaserPointerManager::editRenderState(QUuid uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->editRenderState(state, startProps, pathProps, endProps); _laserPointers[uid]->editRenderState(state, startProps, pathProps, endProps);
} }
} }
const RayPickResult LaserPointerManager::getPrevRayPickResult(const QUuid uid) { const RayPickResult LaserPointerManager::getPrevRayPickResult(const QUuid uid) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
ReadLock laserLock(*_laserPointerLocks[uid]); QReadLocker laserLock(_laserPointerLocks[uid].get());
return _laserPointers[uid]->getPrevRayPickResult(); return _laserPointers[uid]->getPrevRayPickResult();
} }
return RayPickResult(); return RayPickResult();
@ -72,23 +72,23 @@ const RayPickResult LaserPointerManager::getPrevRayPickResult(const QUuid uid) {
void LaserPointerManager::update() { void LaserPointerManager::update() {
for (QUuid& uid : _laserPointers.keys()) { for (QUuid& uid : _laserPointers.keys()) {
// This only needs to be a read lock because update won't change any of the properties that can be modified from scripts // This only needs to be a read lock because update won't change any of the properties that can be modified from scripts
ReadLock laserLock(*_laserPointerLocks[uid]); QReadLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->update(); _laserPointers[uid]->update();
} }
WriteLock containsLock(_containsLock); QWriteLocker containsLock(&_containsLock);
{ {
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
while (!_laserPointersToAdd.empty()) { while (!_laserPointersToAdd.empty()) {
std::pair<QUuid, std::shared_ptr<LaserPointer>> laserPointerToAdd = _laserPointersToAdd.front(); std::pair<QUuid, std::shared_ptr<LaserPointer>> laserPointerToAdd = _laserPointersToAdd.front();
_laserPointersToAdd.pop(); _laserPointersToAdd.pop();
_laserPointers[laserPointerToAdd.first] = laserPointerToAdd.second; _laserPointers[laserPointerToAdd.first] = laserPointerToAdd.second;
_laserPointerLocks[laserPointerToAdd.first] = std::make_shared<std::shared_mutex>(); _laserPointerLocks[laserPointerToAdd.first] = std::make_shared<QReadWriteLock>();
} }
} }
{ {
WriteLock lock(_removeLock); QWriteLocker lock(&_removeLock);
while (!_laserPointersToRemove.empty()) { while (!_laserPointersToRemove.empty()) {
QUuid uid = _laserPointersToRemove.front(); QUuid uid = _laserPointersToRemove.front();
_laserPointersToRemove.pop(); _laserPointersToRemove.pop();
@ -99,57 +99,57 @@ void LaserPointerManager::update() {
} }
void LaserPointerManager::setIgnoreEntities(QUuid uid, const QScriptValue& ignoreEntities) { void LaserPointerManager::setIgnoreEntities(QUuid uid, const QScriptValue& ignoreEntities) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIgnoreEntities(ignoreEntities); _laserPointers[uid]->setIgnoreEntities(ignoreEntities);
} }
} }
void LaserPointerManager::setIncludeEntities(QUuid uid, const QScriptValue& includeEntities) { void LaserPointerManager::setIncludeEntities(QUuid uid, const QScriptValue& includeEntities) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIncludeEntities(includeEntities); _laserPointers[uid]->setIncludeEntities(includeEntities);
} }
} }
void LaserPointerManager::setIgnoreOverlays(QUuid uid, const QScriptValue& ignoreOverlays) { void LaserPointerManager::setIgnoreOverlays(QUuid uid, const QScriptValue& ignoreOverlays) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIgnoreOverlays(ignoreOverlays); _laserPointers[uid]->setIgnoreOverlays(ignoreOverlays);
} }
} }
void LaserPointerManager::setIncludeOverlays(QUuid uid, const QScriptValue& includeOverlays) { void LaserPointerManager::setIncludeOverlays(QUuid uid, const QScriptValue& includeOverlays) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIncludeOverlays(includeOverlays); _laserPointers[uid]->setIncludeOverlays(includeOverlays);
} }
} }
void LaserPointerManager::setIgnoreAvatars(QUuid uid, const QScriptValue& ignoreAvatars) { void LaserPointerManager::setIgnoreAvatars(QUuid uid, const QScriptValue& ignoreAvatars) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIgnoreAvatars(ignoreAvatars); _laserPointers[uid]->setIgnoreAvatars(ignoreAvatars);
} }
} }
void LaserPointerManager::setIncludeAvatars(QUuid uid, const QScriptValue& includeAvatars) { void LaserPointerManager::setIncludeAvatars(QUuid uid, const QScriptValue& includeAvatars) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setIncludeAvatars(includeAvatars); _laserPointers[uid]->setIncludeAvatars(includeAvatars);
} }
} }
void LaserPointerManager::setLockEndUUID(QUuid uid, QUuid objectID, const bool isOverlay) { void LaserPointerManager::setLockEndUUID(QUuid uid, QUuid objectID, const bool isOverlay) {
ReadLock lock(_containsLock); QReadLocker lock(&_containsLock);
if (_laserPointers.contains(uid)) { if (_laserPointers.contains(uid)) {
WriteLock laserLock(*_laserPointerLocks[uid]); QWriteLocker laserLock(_laserPointerLocks[uid].get());
_laserPointers[uid]->setLockEndUUID(objectID, isOverlay); _laserPointers[uid]->setLockEndUUID(objectID, isOverlay);
} }
} }

View file

@ -12,8 +12,8 @@
#define hifi_LaserPointerManager_h #define hifi_LaserPointerManager_h
#include <memory> #include <memory>
#include <shared_mutex>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <QReadWriteLock>
#include "LaserPointer.h" #include "LaserPointer.h"
@ -44,15 +44,12 @@ public:
private: private:
QHash<QUuid, std::shared_ptr<LaserPointer>> _laserPointers; QHash<QUuid, std::shared_ptr<LaserPointer>> _laserPointers;
QHash<QUuid, std::shared_ptr<std::shared_mutex>> _laserPointerLocks; QHash<QUuid, std::shared_ptr<QReadWriteLock>> _laserPointerLocks;
std::shared_mutex _addLock; QReadWriteLock _addLock;
std::queue<std::pair<QUuid, std::shared_ptr<LaserPointer>>> _laserPointersToAdd; std::queue<std::pair<QUuid, std::shared_ptr<LaserPointer>>> _laserPointersToAdd;
std::shared_mutex _removeLock; QReadWriteLock _removeLock;
std::queue<QUuid> _laserPointersToRemove; std::queue<QUuid> _laserPointersToRemove;
std::shared_mutex _containsLock; QReadWriteLock _containsLock;
typedef std::lock_guard<std::shared_mutex> WriteLock;
typedef std::shared_lock<std::shared_mutex> ReadLock;
}; };

View file

@ -111,7 +111,7 @@ void RayPickManager::update() {
} }
} }
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
if (rayPick->getMaxDistance() == 0.0f || (rayPick->getMaxDistance() > 0.0f && res.distance < rayPick->getMaxDistance())) { if (rayPick->getMaxDistance() == 0.0f || (rayPick->getMaxDistance() > 0.0f && res.distance < rayPick->getMaxDistance())) {
rayPick->setRayPickResult(res); rayPick->setRayPickResult(res);
} else { } else {
@ -119,19 +119,19 @@ void RayPickManager::update() {
} }
} }
WriteLock containsLock(_containsLock); QWriteLocker containsLock(&_containsLock);
{ {
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
while (!_rayPicksToAdd.empty()) { while (!_rayPicksToAdd.empty()) {
std::pair<QUuid, std::shared_ptr<RayPick>> rayPickToAdd = _rayPicksToAdd.front(); std::pair<QUuid, std::shared_ptr<RayPick>> rayPickToAdd = _rayPicksToAdd.front();
_rayPicksToAdd.pop(); _rayPicksToAdd.pop();
_rayPicks[rayPickToAdd.first] = rayPickToAdd.second; _rayPicks[rayPickToAdd.first] = rayPickToAdd.second;
_rayPickLocks[rayPickToAdd.first] = std::make_shared<std::shared_mutex>(); _rayPickLocks[rayPickToAdd.first] = std::make_shared<QReadWriteLock>();
} }
} }
{ {
WriteLock lock(_removeLock); QWriteLocker lock(&_removeLock);
while (!_rayPicksToRemove.empty()) { while (!_rayPicksToRemove.empty()) {
QUuid uid = _rayPicksToRemove.front(); QUuid uid = _rayPicksToRemove.front();
_rayPicksToRemove.pop(); _rayPicksToRemove.pop();
@ -172,12 +172,12 @@ QUuid RayPickManager::createRayPick(const QVariantMap& rayProps) {
dirOffset = vec3FromVariant(rayProps["dirOffset"]); dirOffset = vec3FromVariant(rayProps["dirOffset"]);
} }
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
_rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<JointRayPick>(jointName, posOffset, dirOffset, filter, maxDistance, enabled))); _rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<JointRayPick>(jointName, posOffset, dirOffset, filter, maxDistance, enabled)));
return id; return id;
} else { } else {
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
_rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<MouseRayPick>(filter, maxDistance, enabled))); _rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<MouseRayPick>(filter, maxDistance, enabled)));
return id; return id;
@ -190,7 +190,7 @@ QUuid RayPickManager::createRayPick(const QVariantMap& rayProps) {
direction = vec3FromVariant(rayProps["direction"]); direction = vec3FromVariant(rayProps["direction"]);
} }
WriteLock lock(_addLock); QWriteLocker lock(&_addLock);
QUuid id = QUuid::createUuid(); QUuid id = QUuid::createUuid();
_rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<StaticRayPick>(position, direction, filter, maxDistance, enabled))); _rayPicksToAdd.push(std::pair<QUuid, std::shared_ptr<RayPick>>(id, std::make_shared<StaticRayPick>(position, direction, filter, maxDistance, enabled)));
return id; return id;
@ -200,28 +200,28 @@ QUuid RayPickManager::createRayPick(const QVariantMap& rayProps) {
} }
void RayPickManager::removeRayPick(const QUuid uid) { void RayPickManager::removeRayPick(const QUuid uid) {
WriteLock lock(_removeLock); QWriteLocker lock(&_removeLock);
_rayPicksToRemove.push(uid); _rayPicksToRemove.push(uid);
} }
void RayPickManager::enableRayPick(const QUuid uid) { void RayPickManager::enableRayPick(const QUuid uid) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock rayPickLock(*_rayPickLocks[uid]); QWriteLocker rayPickLock(_rayPickLocks[uid].get());
_rayPicks[uid]->enable(); _rayPicks[uid]->enable();
} }
} }
void RayPickManager::disableRayPick(const QUuid uid) { void RayPickManager::disableRayPick(const QUuid uid) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock rayPickLock(*_rayPickLocks[uid]); QWriteLocker rayPickLock(_rayPickLocks[uid].get());
_rayPicks[uid]->disable(); _rayPicks[uid]->disable();
} }
} }
const PickRay RayPickManager::getPickRay(const QUuid uid) { const PickRay RayPickManager::getPickRay(const QUuid uid) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
bool valid; bool valid;
PickRay pickRay = _rayPicks[uid]->getPickRay(valid); PickRay pickRay = _rayPicks[uid]->getPickRay(valid);
@ -233,58 +233,58 @@ const PickRay RayPickManager::getPickRay(const QUuid uid) {
} }
const RayPickResult RayPickManager::getPrevRayPickResult(const QUuid uid) { const RayPickResult RayPickManager::getPrevRayPickResult(const QUuid uid) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
ReadLock lock(*_rayPickLocks[uid]); QReadLocker lock(_rayPickLocks[uid].get());
return _rayPicks[uid]->getPrevRayPickResult(); return _rayPicks[uid]->getPrevRayPickResult();
} }
return RayPickResult(); return RayPickResult();
} }
void RayPickManager::setIgnoreEntities(QUuid uid, const QScriptValue& ignoreEntities) { void RayPickManager::setIgnoreEntities(QUuid uid, const QScriptValue& ignoreEntities) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIgnoreEntities(ignoreEntities); _rayPicks[uid]->setIgnoreEntities(ignoreEntities);
} }
} }
void RayPickManager::setIncludeEntities(QUuid uid, const QScriptValue& includeEntities) { void RayPickManager::setIncludeEntities(QUuid uid, const QScriptValue& includeEntities) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIncludeEntities(includeEntities); _rayPicks[uid]->setIncludeEntities(includeEntities);
} }
} }
void RayPickManager::setIgnoreOverlays(QUuid uid, const QScriptValue& ignoreOverlays) { void RayPickManager::setIgnoreOverlays(QUuid uid, const QScriptValue& ignoreOverlays) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIgnoreOverlays(ignoreOverlays); _rayPicks[uid]->setIgnoreOverlays(ignoreOverlays);
} }
} }
void RayPickManager::setIncludeOverlays(QUuid uid, const QScriptValue& includeOverlays) { void RayPickManager::setIncludeOverlays(QUuid uid, const QScriptValue& includeOverlays) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIncludeOverlays(includeOverlays); _rayPicks[uid]->setIncludeOverlays(includeOverlays);
} }
} }
void RayPickManager::setIgnoreAvatars(QUuid uid, const QScriptValue& ignoreAvatars) { void RayPickManager::setIgnoreAvatars(QUuid uid, const QScriptValue& ignoreAvatars) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIgnoreAvatars(ignoreAvatars); _rayPicks[uid]->setIgnoreAvatars(ignoreAvatars);
} }
} }
void RayPickManager::setIncludeAvatars(QUuid uid, const QScriptValue& includeAvatars) { void RayPickManager::setIncludeAvatars(QUuid uid, const QScriptValue& includeAvatars) {
ReadLock containsLock(_containsLock); QReadLocker containsLock(&_containsLock);
if (_rayPicks.contains(uid)) { if (_rayPicks.contains(uid)) {
WriteLock lock(*_rayPickLocks[uid]); QWriteLocker lock(_rayPickLocks[uid].get());
_rayPicks[uid]->setIncludeAvatars(includeAvatars); _rayPicks[uid]->setIncludeAvatars(includeAvatars);
} }
} }

View file

@ -14,8 +14,8 @@
#include "RayPick.h" #include "RayPick.h"
#include <memory> #include <memory>
#include <shared_mutex>
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QReadWriteLock>
#include "RegisteredMetaTypes.h" #include "RegisteredMetaTypes.h"
#include "DependencyManager.h" #include "DependencyManager.h"
@ -63,12 +63,12 @@ public slots:
private: private:
QHash<QUuid, std::shared_ptr<RayPick>> _rayPicks; QHash<QUuid, std::shared_ptr<RayPick>> _rayPicks;
QHash<QUuid, std::shared_ptr<std::shared_mutex>> _rayPickLocks; QHash<QUuid, std::shared_ptr<QReadWriteLock>> _rayPickLocks;
std::shared_mutex _addLock; QReadWriteLock _addLock;
std::queue<std::pair<QUuid, std::shared_ptr<RayPick>>> _rayPicksToAdd; std::queue<std::pair<QUuid, std::shared_ptr<RayPick>>> _rayPicksToAdd;
std::shared_mutex _removeLock; QReadWriteLock _removeLock;
std::queue<QUuid> _rayPicksToRemove; std::queue<QUuid> _rayPicksToRemove;
std::shared_mutex _containsLock; QReadWriteLock _containsLock;
typedef QHash<QPair<glm::vec3, glm::vec3>, std::unordered_map<RayPickFilter::Flags, RayPickResult>> RayPickCache; typedef QHash<QPair<glm::vec3, glm::vec3>, std::unordered_map<RayPickFilter::Flags, RayPickResult>> RayPickCache;
@ -91,9 +91,6 @@ private:
unsigned int INTERSECTED_AVATAR() { return IntersectionType::AVATAR; } unsigned int INTERSECTED_AVATAR() { return IntersectionType::AVATAR; }
unsigned int INTERSECTED_HUD() { return IntersectionType::HUD; } unsigned int INTERSECTED_HUD() { return IntersectionType::HUD; }
typedef std::lock_guard<std::shared_mutex> WriteLock;
typedef std::shared_lock<std::shared_mutex> ReadLock;
}; };
#endif // hifi_RayPickManager_h #endif // hifi_RayPickManager_h