From 7964f06990710a6219ec6441ab40ca3aab4ac32b Mon Sep 17 00:00:00 2001 From: Heather Anderson Date: Tue, 31 Aug 2021 20:42:44 -0700 Subject: [PATCH] moving EntityItemID from script-engine to shared --- .../entities/src/EntityScriptingInterface.cpp | 7 +- libraries/script-engine/src/EntityItemID.cpp | 74 ------------------- libraries/script-engine/src/ScriptManager.cpp | 8 +- .../script-engine/src/ScriptValueUtils.cpp | 24 ++++++ .../script-engine/src/ScriptValueUtils.h | 5 ++ libraries/shared/src/EntityItemID.cpp | 42 +++++++++++ .../src/EntityItemID.h | 10 +-- 7 files changed, 80 insertions(+), 90 deletions(-) delete mode 100644 libraries/script-engine/src/EntityItemID.cpp create mode 100644 libraries/shared/src/EntityItemID.cpp rename libraries/{script-engine => shared}/src/EntityItemID.h (72%) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index ba338e6084..f3723b1744 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -145,7 +145,7 @@ void EntityScriptingInterface::attachDefaultEventHandlers(ScriptManager* manager using SingleEntityHandler = std::function; auto makeSingleEntityHandler = [manager](QString eventName) -> SingleEntityHandler { return [manager, eventName](const EntityItemID& entityItemID) { - manager->forwardHandlerCall(entityItemID, eventName, { entityItemID.toScriptValue(manager->engine().data()) }); + manager->forwardHandlerCall(entityItemID, eventName, { EntityItemIDtoScriptValue(manager->engine().data(), entityItemID) }); }; }; @@ -161,7 +161,7 @@ void EntityScriptingInterface::attachDefaultEventHandlers(ScriptManager* manager if (!EntityTree::areEntityClicksCaptured()) { ScriptEngine* engine = manager->engine().data(); manager->forwardHandlerCall(entityItemID, eventName, - { entityItemID.toScriptValue(engine), event.toScriptValue(engine) }); + { EntityItemIDtoScriptValue(engine, entityItemID), event.toScriptValue(engine) }); } }; }; @@ -178,7 +178,8 @@ void EntityScriptingInterface::attachDefaultEventHandlers(ScriptManager* manager return [manager, eventName](const EntityItemID& idA, const EntityItemID& idB, const Collision& collision) { ScriptEngine* engine = manager->engine().data(); manager->forwardHandlerCall(idA, eventName, - { idA.toScriptValue(engine), idB.toScriptValue(engine), + { EntityItemIDtoScriptValue(engine, idA), + EntityItemIDtoScriptValue(engine, idB), collisionToScriptValue(engine, collision) }); }; }; diff --git a/libraries/script-engine/src/EntityItemID.cpp b/libraries/script-engine/src/EntityItemID.cpp deleted file mode 100644 index 275637dfa8..0000000000 --- a/libraries/script-engine/src/EntityItemID.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// -// EntityItemID.cpp -// libraries/script-engine/src -// -// Created by Brad Hefta-Gaub on 12/4/13. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include "EntityItemID.h" -#include -#include - -#include -#include -#include - -#include -#include "ScriptValue.h" -#include "ScriptValueUtils.h" - -int entityItemIDTypeID = qRegisterMetaType(); - -EntityItemID::EntityItemID() : QUuid() -{ -} - - -EntityItemID::EntityItemID(const QUuid& id) : QUuid(id) -{ -} - -// EntityItemID::EntityItemID(const EntityItemID& other) : QUuid(other) -// { -// } - -EntityItemID EntityItemID::readEntityItemIDFromBuffer(const unsigned char* data, int bytesLeftToRead) { - EntityItemID result; - if (bytesLeftToRead >= NUM_BYTES_RFC4122_UUID) { - BufferParser(data, bytesLeftToRead).readUuid(result); - } - return result; -} - -ScriptValuePointer EntityItemID::toScriptValue(ScriptEngine* engine) const { - return EntityItemIDtoScriptValue(engine, *this); -} - -ScriptValuePointer EntityItemIDtoScriptValue(ScriptEngine* engine, const EntityItemID& id) { - return quuidToScriptValue(engine, id); -} - -void EntityItemIDfromScriptValue(const ScriptValuePointer &object, EntityItemID& id) { - quuidFromScriptValue(object, id); -} - -QVector qVectorEntityItemIDFromScriptValue(const ScriptValuePointer& array) { - if (!array->isArray()) { - return QVector(); - } - QVector newVector; - int length = array->property("length")->toInteger(); - newVector.reserve(length); - for (int i = 0; i < length; i++) { - QString uuidAsString = array->property(i)->toString(); - EntityItemID fromString(uuidAsString); - newVector << fromString; - } - return newVector; -} - -size_t std::hash::operator()(const EntityItemID& id) const { return qHash(id); } diff --git a/libraries/script-engine/src/ScriptManager.cpp b/libraries/script-engine/src/ScriptManager.cpp index e2bebd5202..b6886eaeb0 100644 --- a/libraries/script-engine/src/ScriptManager.cpp +++ b/libraries/script-engine/src/ScriptManager.cpp @@ -2340,7 +2340,7 @@ void ScriptManager::callEntityScriptMethod(const EntityItemID& entityID, const Q auto scriptEngine = engine().data(); ScriptValueList args; - args << entityID.toScriptValue(scriptEngine); + args << EntityItemIDtoScriptValue(scriptEngine, entityID); args << scriptValueFromSequence(scriptEngine, params); ScriptValuePointer oldData = scriptEngine->globalObject()->property("Script")->property("remoteCallerID"); @@ -2383,7 +2383,7 @@ void ScriptManager::callEntityScriptMethod(const EntityItemID& entityID, const Q auto scriptEngine = engine().data(); ScriptValueList args; - args << entityID.toScriptValue(scriptEngine); + args << EntityItemIDtoScriptValue(scriptEngine, entityID); args << event.toScriptValue(scriptEngine); callWithEnvironment(entityID, details.definingSandboxURL, entityScript->property(methodName), entityScript, args); } @@ -2423,8 +2423,8 @@ void ScriptManager::callEntityScriptMethod(const EntityItemID& entityID, const Q auto scriptEngine = engine().data(); ScriptValueList args; - args << entityID.toScriptValue(scriptEngine); - args << otherID.toScriptValue(scriptEngine); + args << EntityItemIDtoScriptValue(scriptEngine, entityID); + args << EntityItemIDtoScriptValue(scriptEngine, otherID); args << collisionToScriptValue(scriptEngine, collision); callWithEnvironment(entityID, details.definingSandboxURL, entityScript->property(methodName), entityScript, args); } diff --git a/libraries/script-engine/src/ScriptValueUtils.cpp b/libraries/script-engine/src/ScriptValueUtils.cpp index ba047da230..6ee0091e09 100644 --- a/libraries/script-engine/src/ScriptValueUtils.cpp +++ b/libraries/script-engine/src/ScriptValueUtils.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "ScriptEngine.h" #include "ScriptEngineCast.h" @@ -885,3 +886,26 @@ void promiseFromScriptValue(const ScriptValuePointer& object, std::shared_ptr& promise) { return engine->newQObject(promise.get()); } + +ScriptValuePointer EntityItemIDtoScriptValue(ScriptEngine* engine, const EntityItemID& id) { + return quuidToScriptValue(engine, id); +} + +void EntityItemIDfromScriptValue(const ScriptValuePointer &object, EntityItemID& id) { + quuidFromScriptValue(object, id); +} + +QVector qVectorEntityItemIDFromScriptValue(const ScriptValuePointer& array) { + if (!array->isArray()) { + return QVector(); + } + QVector newVector; + int length = array->property("length")->toInteger(); + newVector.reserve(length); + for (int i = 0; i < length; i++) { + QString uuidAsString = array->property(i)->toString(); + EntityItemID fromString(uuidAsString); + newVector << fromString; + } + return newVector; +} diff --git a/libraries/script-engine/src/ScriptValueUtils.h b/libraries/script-engine/src/ScriptValueUtils.h index 8d35439992..636845916f 100644 --- a/libraries/script-engine/src/ScriptValueUtils.h +++ b/libraries/script-engine/src/ScriptValueUtils.h @@ -262,6 +262,11 @@ class MiniPromise; void promiseFromScriptValue(const ScriptValuePointer& object, std::shared_ptr& promise); ScriptValuePointer promiseToScriptValue(ScriptEngine* engine, const std::shared_ptr& promise); +class EntityItemID; +ScriptValuePointer EntityItemIDtoScriptValue(ScriptEngine* engine, const EntityItemID& properties); +void EntityItemIDfromScriptValue(const ScriptValuePointer& object, EntityItemID& properties); +QVector qVectorEntityItemIDFromScriptValue(const ScriptValuePointer& array); + #endif // #define hifi_ScriptValueUtils_h /// @} diff --git a/libraries/shared/src/EntityItemID.cpp b/libraries/shared/src/EntityItemID.cpp new file mode 100644 index 0000000000..8cb34c13db --- /dev/null +++ b/libraries/shared/src/EntityItemID.cpp @@ -0,0 +1,42 @@ +// +// EntityItemID.cpp +// libraries/shared/src +// +// Created by Brad Hefta-Gaub on 12/4/13. +// Copyright 2013 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "EntityItemID.h" +#include +#include + +#include "BufferParser.h" +#include "UUID.h" + +int entityItemIDTypeID = qRegisterMetaType(); + +EntityItemID::EntityItemID() : QUuid() +{ +} + + +EntityItemID::EntityItemID(const QUuid& id) : QUuid(id) +{ +} + +// EntityItemID::EntityItemID(const EntityItemID& other) : QUuid(other) +// { +// } + +EntityItemID EntityItemID::readEntityItemIDFromBuffer(const unsigned char* data, int bytesLeftToRead) { + EntityItemID result; + if (bytesLeftToRead >= NUM_BYTES_RFC4122_UUID) { + BufferParser(data, bytesLeftToRead).readUuid(result); + } + return result; +} + +size_t std::hash::operator()(const EntityItemID& id) const { return qHash(id); } diff --git a/libraries/script-engine/src/EntityItemID.h b/libraries/shared/src/EntityItemID.h similarity index 72% rename from libraries/script-engine/src/EntityItemID.h rename to libraries/shared/src/EntityItemID.h index 72a1bc90c7..51ea1871ae 100644 --- a/libraries/script-engine/src/EntityItemID.h +++ b/libraries/shared/src/EntityItemID.h @@ -1,6 +1,6 @@ // // EntityItemID.h -// libraries/script-engine/src +// libraries/shared/src // // Created by Brad Hefta-Gaub on 12/4/13. // Copyright 2013 High Fidelity, Inc. @@ -20,10 +20,6 @@ #include #include -class ScriptEngine; -class ScriptValue; -using ScriptValuePointer = QSharedPointer; - const QUuid UNKNOWN_ENTITY_ID; // null uuid /// Abstract ID for editing model items. Used in EntityItem JS API. @@ -33,7 +29,6 @@ public: EntityItemID(const QUuid& id); // EntityItemID(const EntityItemID& other); static EntityItemID readEntityItemIDFromBuffer(const unsigned char* data, int bytesLeftToRead); - ScriptValuePointer toScriptValue(ScriptEngine* engine) const; bool isInvalidID() const { return *this == UNKNOWN_ENTITY_ID; } }; @@ -45,9 +40,6 @@ inline QDebug operator<<(QDebug debug, const EntityItemID& id) { Q_DECLARE_METATYPE(EntityItemID); Q_DECLARE_METATYPE(QVector); -ScriptValuePointer EntityItemIDtoScriptValue(ScriptEngine* engine, const EntityItemID& properties); -void EntityItemIDfromScriptValue(const ScriptValuePointer &object, EntityItemID& properties); -QVector qVectorEntityItemIDFromScriptValue(const ScriptValuePointer& array); // Allow the use of std::unordered_map with QUuid keys namespace std { template<> struct hash { size_t operator()(const EntityItemID& id) const; }; }