diff --git a/Sources/Plasma/CoreLib/hsRefCnt.h b/Sources/Plasma/CoreLib/hsRefCnt.h index e56868fa12..9c88dddc09 100644 --- a/Sources/Plasma/CoreLib/hsRefCnt.h +++ b/Sources/Plasma/CoreLib/hsRefCnt.h @@ -78,6 +78,8 @@ class hsRefCnt { dst = src; \ } while (0) +struct hsStealRef_Type {}; +constexpr hsStealRef_Type hsStealRef; template class hsRef @@ -86,6 +88,7 @@ class hsRef hsRef() : fObj(nullptr) { } hsRef(std::nullptr_t) : fObj(nullptr) { } hsRef(_Ref *obj) : fObj(obj) { if (fObj) fObj->Ref(); } + hsRef(_Ref *obj, hsStealRef_Type) : fObj(obj) { } hsRef(const hsRef<_Ref> ©) : fObj(copy.fObj) { if (fObj) fObj->Ref(); } hsRef(hsRef<_Ref> &&move) : fObj(move.fObj) { move.fObj = nullptr; } @@ -132,6 +135,13 @@ class hsRef _Ref *operator->() const { return fObj; } operator _Ref *() const { return fObj; } + void Steal(_Ref *obj) + { + if (fObj) + fObj->UnRef(); + fObj = obj; + } + private: _Ref *fObj; }; diff --git a/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore.cpp b/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore.cpp index f4fb14cdb5..cfe05e9df8 100644 --- a/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore.cpp +++ b/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore.cpp @@ -49,21 +49,17 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com /* Get the pfPasswordStore instance */ pfPasswordStore* pfPasswordStore::Instance() { - static pfPasswordStore* store = nullptr; - - if (store == nullptr) { #if defined(HS_BUILD_FOR_WIN32) - store = new pfWin32PasswordStore(); + static pfWin32PasswordStore store; #elif defined(HS_BUILD_FOR_APPLE) - store = new pfApplePasswordStore(); + static pfApplePasswordStore store; #elif defined(HAVE_LIBSECRET) - store = new pfUnixPasswordStore(); + static pfUnixPasswordStore store; #else - store = new pfFilePasswordStore(); + static pfFilePasswordStore store; #endif - } - return store; + return &store; } diff --git a/Sources/Plasma/FeatureLib/pfPython/Pch.h b/Sources/Plasma/FeatureLib/pfPython/Pch.h index 0965f69a50..9846a05dcf 100644 --- a/Sources/Plasma/FeatureLib/pfPython/Pch.h +++ b/Sources/Plasma/FeatureLib/pfPython/Pch.h @@ -54,6 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include #include #include +#include #include // Platform Library Includes diff --git a/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.h b/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.h index 6191d3c8d9..61fabbbf05 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.h @@ -80,6 +80,9 @@ struct pythonClassName \ // This makes sure that our python new function can access our constructors #define PYTHON_CLASS_NEW_FRIEND(pythonClassName) friend PyObject *pythonClassName##_new(PyTypeObject *type, PyObject *args, PyObject *keywords) +#define PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION \ + static PyObject* New(hsRef vaultNode=nullptr); + // This defines the basic new function for a class #define PYTHON_CLASS_NEW_DEFINITION static PyObject *New() @@ -90,6 +93,15 @@ PyObject *glueClassName::New() \ return (PyObject*)newObj; \ } +#define PYTHON_CLASS_VAULT_NODE_NEW_IMPL(pythonClassName, glueClassName) \ +PyObject* glueClassName::New(hsRef nfsNode) \ +{ \ + pythonClassName* newObj = (pythonClassName*)pythonClassName##_type.tp_new(&pythonClassName##_type, nullptr, nullptr); \ + if (nfsNode) \ + newObj->fThis->fNode = std::move(nfsNode); \ + return (PyObject*)newObj; \ +} + // This defines the basic check function for a class #define PYTHON_CLASS_CHECK_DEFINITION static bool Check(PyObject *obj) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp index 74c88eccc8..7a36fe61e7 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp @@ -45,6 +45,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com // ////////////////////////////////////////////////////////////////////// +#include #include #pragma hdrstop @@ -80,35 +81,29 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com //============================================================================ static PyObject * GetFolder (unsigned folderType) { - PyObject * result = nil; if (hsRef rvnPlr = VaultGetPlayerNode()) { if (hsRef rvnFldr = rvnPlr->GetChildFolderNode(folderType, 1)) - result = pyVaultFolderNode::New(rvnFldr); + return pyVaultFolderNode::New(rvnFldr); } - - return result; + return nullptr; } //============================================================================ static PyObject * GetPlayerInfoList (unsigned folderType) { - PyObject * result = nil; if (hsRef rvnPlr = VaultGetPlayerNode()) { if (hsRef rvnFldr = rvnPlr->GetChildPlayerInfoListNode(folderType, 1)) - result = pyVaultPlayerInfoListNode::New(rvnFldr); + return pyVaultPlayerInfoListNode::New(rvnFldr); } - - return result; + return nullptr; } //============================================================================ static PyObject * GetAgeInfoList (unsigned folderType) { - PyObject * result = nil; if (hsRef rvnPlr = VaultGetPlayerNode()) { if (hsRef rvnFldr = rvnPlr->GetChildAgeInfoListNode(folderType, 1)) - result = pyVaultAgeInfoListNode::New(rvnFldr); + return pyVaultAgeInfoListNode::New(rvnFldr); } - - return result; + return nullptr; } ////////////////////////////////////////////////// @@ -119,11 +114,11 @@ PyObject* pyVault::GetPlayerInfo() if (hsRef rvnPlrInfo = rvnPlr->GetChildNode(plVault::kNodeType_PlayerInfo, 1)) result = pyVaultPlayerInfoNode::New(rvnPlrInfo); } - + // just return an empty node if (!result) - result = pyVaultPlayerInfoNode::New(nil); - + result = pyVaultPlayerInfoNode::New(); + return result; } @@ -182,8 +177,8 @@ PyObject* pyVault::GetAgeJournalsFolder() // just return an empty node if (!result) - result = pyVaultFolderNode::New(nil); - + result = pyVaultFolderNode::New(); + return result; } @@ -395,34 +390,25 @@ PyObject* pyVault::GetInviteFolder() PyObject* pyVault::GetPsnlAgeSDL() const { - PyObject * result = nil; - hsRef templateNode = new NetVaultNode; - if (hsRef rvnFldr = VaultGetAgesIOwnFolder()) { - - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(kPersonalAgeFilename); - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_SDL); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_SDL); - if (hsRef rvnSdl = rvnInfo->GetChildNode(templateNode, 1)) { + if (hsRef rvnSdl = rvnInfo->GetChildNode(&templateNode, 1)) { VaultSDLNode sdl(rvnSdl); - plStateDataRecord * rec = new plStateDataRecord; - if (sdl.GetStateDataRecord(rec, plSDL::kKeepDirty)) - result = pySDLStateDataRecord::New(rec); - else - delete rec; + auto rec = std::make_unique(); + if (sdl.GetStateDataRecord(rec.get(), plSDL::kKeepDirty)) + return pySDLStateDataRecord::New(rec.release()); } } } - - if (!result) - PYTHON_RETURN_NONE; - - return result; + PYTHON_RETURN_NONE; } void pyVault::UpdatePsnlAgeSDL( pySDLStateDataRecord & pyrec ) @@ -431,19 +417,17 @@ void pyVault::UpdatePsnlAgeSDL( pySDLStateDataRecord & pyrec ) if ( !rec ) return; - hsRef templateNode = new NetVaultNode; - + NetVaultNode templateNode; if (hsRef rvnFldr = VaultGetAgesIOwnFolder()) { - - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(kPersonalAgeFilename); - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_SDL); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_SDL); - if (hsRef rvnSdl = rvnInfo->GetChildNode(templateNode, 1)) { + if (hsRef rvnSdl = rvnInfo->GetChildNode(&templateNode, 1)) { VaultSDLNode sdl(rvnSdl); sdl.SetStateDataRecord(rec, plSDL::kDirtyOnly | plSDL::kTimeStampOnRead); } @@ -529,12 +513,12 @@ void _InvitePlayerToAge(ENetError result, void* state, void* param, RelVaultNode void pyVault::InvitePlayerToAge( const pyAgeLinkStruct & link, uint32_t playerID ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode visitAcc(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode visitAcc(&templateNode); visitAcc.SetNoteType(plVault::kNoteType_Visit); visitAcc.SetVisitInfo(*link.GetAgeLink()->GetAgeInfo()); - VaultCreateNode(templateNode, (FVaultCreateNodeCallback)_InvitePlayerToAge, nil, (void*)(uintptr_t)playerID); + VaultCreateNode(&templateNode, (FVaultCreateNodeCallback)_InvitePlayerToAge, nullptr, (void*)(uintptr_t)playerID); } //============================================================================ @@ -557,12 +541,12 @@ void pyVault::UnInvitePlayerToAge( const char * str, uint32_t playerID ) } } - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode visitAcc(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode visitAcc(&templateNode); visitAcc.SetNoteType(plVault::kNoteType_UnVisit); visitAcc.SetVisitInfo(info); - VaultCreateNode(templateNode, (FVaultCreateNodeCallback)_UninvitePlayerToAge, nil, (void*)(uintptr_t)playerID); + VaultCreateNode(&templateNode, (FVaultCreateNodeCallback)_UninvitePlayerToAge, nullptr, (void*)(uintptr_t)playerID); } //============================================================================ diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.cpp index 8091240378..ab40169344 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.cpp @@ -52,15 +52,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "plVault/plVault.h" -// should only be created from C++ side -pyVaultAgeInfoListNode::pyVaultAgeInfoListNode(RelVaultNode* nfsNode) -: pyVaultFolderNode(nfsNode) -{ -} - //create from the Python side -pyVaultAgeInfoListNode::pyVaultAgeInfoListNode(int n) -: pyVaultFolderNode(n) +pyVaultAgeInfoListNode::pyVaultAgeInfoListNode() + : pyVaultFolderNode() { fNode->SetNodeType(plVault::kNodeType_AgeInfoList); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.h index b4a232682a..48b5cfc646 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNode.h @@ -54,21 +54,16 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com struct RelVaultNode; - class pyVaultAgeInfoListNode : public pyVaultFolderNode { protected: - // should only be created from C++ side - pyVaultAgeInfoListNode(RelVaultNode* nfsNode); - // python-side ctor - pyVaultAgeInfoListNode(int n=0); + pyVaultAgeInfoListNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultAgeInfoListNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultAgeInfoListNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultAgeInfoListNode); // converts a PyObject to a pyVaultAgeInfoListNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNodeGlue.cpp index 71557e3aaf..c9a6c63808 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoListNodeGlue.cpp @@ -105,22 +105,10 @@ PYTHON_START_METHODS_TABLE(ptVaultAgeInfoListNode) PYTHON_END_METHODS_TABLE; // Type structure definition -PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeInfoListNode, pyVaultFolderNode, "Params: n=0\nPlasma vault age info list node"); +PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeInfoListNode, pyVaultFolderNode, "Plasma vault age info list node"); // required functions for PyObject interoperability -PyObject *pyVaultAgeInfoListNode::New(RelVaultNode* nfsNode) -{ - ptVaultAgeInfoListNode *newObj = (ptVaultAgeInfoListNode*)ptVaultAgeInfoListNode_type.tp_new(&ptVaultAgeInfoListNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultAgeInfoListNode::New(int n /* =0 */) -{ - ptVaultAgeInfoListNode *newObj = (ptVaultAgeInfoListNode*)ptVaultAgeInfoListNode_type.tp_new(&ptVaultAgeInfoListNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultAgeInfoListNode, pyVaultAgeInfoListNode); PYTHON_CLASS_CHECK_IMPL(ptVaultAgeInfoListNode, pyVaultAgeInfoListNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultAgeInfoListNode, pyVaultAgeInfoListNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.cpp index 69de37173f..4f41ed57ed 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.cpp @@ -62,15 +62,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pnUUID/pnUUID.h" #include "plVault/plVault.h" -// should only be created from C++ side -pyVaultAgeInfoNode::pyVaultAgeInfoNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - -//create from the Python side -pyVaultAgeInfoNode::pyVaultAgeInfoNode(int n) -: pyVaultNode(new RelVaultNode) +pyVaultAgeInfoNode::pyVaultAgeInfoNode() + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_AgeInfo); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.h index e6b3bd7a1a..2615778c8b 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNode.h @@ -62,17 +62,13 @@ class plUUID; class pyVaultAgeInfoNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultAgeInfoNode(RelVaultNode* vaultNode); - //create from the Python side - pyVaultAgeInfoNode(int n=0); + pyVaultAgeInfoNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultAgeInfoNode); - static PyObject *New(RelVaultNode* vaultNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultAgeInfoNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultAgeInfoNode); // converts a PyObject to a pyVaultAgeInfoNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNodeGlue.cpp index bd51336f98..7a074d32a5 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeInfoNodeGlue.cpp @@ -281,22 +281,10 @@ PYTHON_START_METHODS_TABLE(ptVaultAgeInfoNode) PYTHON_END_METHODS_TABLE; // Type structure definition -PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeInfoNode, pyVaultNode, "Params: n=0\nPlasma vault age info node"); +PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeInfoNode, pyVaultNode, "Plasma vault age info node"); // required functions for PyObject interoperability -PyObject *pyVaultAgeInfoNode::New(RelVaultNode* nfsNode) -{ - ptVaultAgeInfoNode *newObj = (ptVaultAgeInfoNode*)ptVaultAgeInfoNode_type.tp_new(&ptVaultAgeInfoNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultAgeInfoNode::New(int n /* =0 */) -{ - ptVaultAgeInfoNode *newObj = (ptVaultAgeInfoNode*)ptVaultAgeInfoNode_type.tp_new(&ptVaultAgeInfoNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultAgeInfoNode, pyVaultAgeInfoNode); PYTHON_CLASS_CHECK_IMPL(ptVaultAgeInfoNode, pyVaultAgeInfoNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultAgeInfoNode, pyVaultAgeInfoNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.cpp index 664eabeb57..19283a4c03 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.cpp @@ -58,15 +58,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "plNetCommon/plSpawnPointInfo.h" -// should only be created from C++ side -pyVaultAgeLinkNode::pyVaultAgeLinkNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side -pyVaultAgeLinkNode::pyVaultAgeLinkNode(int n) -: pyVaultNode(new RelVaultNode) +pyVaultAgeLinkNode::pyVaultAgeLinkNode() + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_AgeLink); } @@ -81,13 +75,8 @@ PyObject* pyVaultAgeLinkNode::GetAgeInfo() const if (!fNode) PYTHON_RETURN_NONE; - PyObject * result = nil; if (hsRef rvn = fNode->GetChildNode(plVault::kNodeType_AgeInfo, 1)) - result = pyVaultAgeInfoNode::New(rvn); - - if (result) - return result; - + return pyVaultAgeInfoNode::New(rvn); PYTHON_RETURN_NONE; } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.h index 6dd7c8a1f4..4eee5fbee7 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNode.h @@ -67,17 +67,13 @@ class pyVaultAgeLinkNode : public pyVaultNode mutable plAgeLinkStruct fAgeLinkStruct; // for use with AsAgeLinkStruct() protected: - // should only be created from C++ side - pyVaultAgeLinkNode(RelVaultNode* nfsNode); - //create from the Python side - pyVaultAgeLinkNode(int n=0); + pyVaultAgeLinkNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultAgeLinkNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultAgeLinkNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultAgeLinkNode); // converts a PyObject to a pyVaultAgeLinkNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNodeGlue.cpp index e73dcfe591..82e6280d01 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultAgeLinkNodeGlue.cpp @@ -193,22 +193,10 @@ PYTHON_START_METHODS_TABLE(ptVaultAgeLinkNode) PYTHON_END_METHODS_TABLE; // Type structure definition -PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeLinkNode, pyVaultNode, "Params: n=0\nPlasma vault age link node"); +PLASMA_DEFAULT_TYPE_WBASE(ptVaultAgeLinkNode, pyVaultNode, "Plasma vault age link node"); // required functions for PyObject interoperability -PyObject *pyVaultAgeLinkNode::New(RelVaultNode* nfsNode) -{ - ptVaultAgeLinkNode *newObj = (ptVaultAgeLinkNode*)ptVaultAgeLinkNode_type.tp_new(&ptVaultAgeLinkNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultAgeLinkNode::New(int n /* =0 */) -{ - ptVaultAgeLinkNode *newObj = (ptVaultAgeLinkNode*)ptVaultAgeLinkNode_type.tp_new(&ptVaultAgeLinkNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultAgeLinkNode, pyVaultAgeLinkNode) PYTHON_CLASS_CHECK_IMPL(ptVaultAgeLinkNode, pyVaultAgeLinkNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultAgeLinkNode, pyVaultAgeLinkNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.cpp index 041e1f7be4..4b1843be4f 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.cpp @@ -53,15 +53,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com # include "pyVault.h" #endif -// should only be created from C++ side -pyVaultChronicleNode::pyVaultChronicleNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side -pyVaultChronicleNode::pyVaultChronicleNode(int n) -: pyVaultNode(new RelVaultNode) +pyVaultChronicleNode::pyVaultChronicleNode() + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_Chronicle); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.h index 07465ff83a..db2ea55f52 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNode.h @@ -57,19 +57,15 @@ struct RelVaultNode; class pyVaultChronicleNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultChronicleNode(RelVaultNode* nfsNode); - //create from the Python side - pyVaultChronicleNode(int n=0); + pyVaultChronicleNode(); public: ~pyVaultChronicleNode() { } // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultChronicleNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultChronicleNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultChronicleNode); // converts a PyObject to a pyVaultChronicleNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNodeGlue.cpp index 8a4b3d12a7..8476ec9dbd 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultChronicleNodeGlue.cpp @@ -184,22 +184,10 @@ PYTHON_START_METHODS_TABLE(ptVaultChronicleNode) PYTHON_END_METHODS_TABLE; // Type structure definition -PLASMA_DEFAULT_TYPE_WBASE(ptVaultChronicleNode, pyVaultNode, "Params: n=0\nPlasma vault chronicle node"); +PLASMA_DEFAULT_TYPE_WBASE(ptVaultChronicleNode, pyVaultNode, "Plasma vault chronicle node"); // required functions for PyObject interoperability -PyObject *pyVaultChronicleNode::New(RelVaultNode* nfsNode) -{ - ptVaultChronicleNode *newObj = (ptVaultChronicleNode*)ptVaultChronicleNode_type.tp_new(&ptVaultChronicleNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultChronicleNode::New(int n /* =0 */) -{ - ptVaultChronicleNode *newObj = (ptVaultChronicleNode*)ptVaultChronicleNode_type.tp_new(&ptVaultChronicleNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultChronicleNode, pyVaultChronicleNode) PYTHON_CLASS_CHECK_IMPL(ptVaultChronicleNode, pyVaultChronicleNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultChronicleNode, pyVaultChronicleNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.cpp index 56f1221a6f..1572dde248 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.cpp @@ -50,22 +50,13 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pyVaultFolderNode.h" #include "plVault/plVault.h" -// should only be created from C++ side -pyVaultFolderNode::pyVaultFolderNode( RelVaultNode* nfsNode ) -: pyVaultNode( nfsNode ) -{ -} - //create from the Python side -pyVaultFolderNode::pyVaultFolderNode(int n) -: pyVaultNode(new RelVaultNode) +pyVaultFolderNode::pyVaultFolderNode() + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_Folder); } -pyVaultFolderNode::~pyVaultFolderNode () { -} - //================================================================== // class RelVaultNode : public plVaultNode // diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.h index fcd4755c4d..ad2a889369 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNode.h @@ -57,20 +57,14 @@ struct RelVaultNode; class pyVaultFolderNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultFolderNode(RelVaultNode* nfsNode); - //create from the Python side - pyVaultFolderNode(int n=0); + pyVaultFolderNode(); public: - ~pyVaultFolderNode(); - // required functions for PyObject interoperability PYTHON_EXPOSE_TYPE; // so we can subclass PYTHON_CLASS_NEW_FRIEND(ptVaultFolderNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultFolderNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultFolderNode); // converts a PyObject to a pyVaultFolderNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNodeGlue.cpp index cbd515e676..3ed50e3e07 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultFolderNodeGlue.cpp @@ -177,19 +177,7 @@ PLASMA_DEFAULT_TYPE_WBASE(ptVaultFolderNode, pyVaultNode, "Params: n=0\nPlasma v PYTHON_EXPOSE_TYPE_DEFINITION(ptVaultFolderNode, pyVaultFolderNode); // required functions for PyObject interoperability -PyObject *pyVaultFolderNode::New(RelVaultNode* nfsNode) -{ - ptVaultFolderNode *newObj = (ptVaultFolderNode*)ptVaultFolderNode_type.tp_new(&ptVaultFolderNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultFolderNode::New(int n /* =0 */) -{ - ptVaultFolderNode *newObj = (ptVaultFolderNode*)ptVaultFolderNode_type.tp_new(&ptVaultFolderNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultFolderNode, pyVaultFolderNode); PYTHON_CLASS_CHECK_IMPL(ptVaultFolderNode, pyVaultFolderNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultFolderNode, pyVaultFolderNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.cpp index cfdecb8a67..c5d05ca098 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.cpp @@ -85,19 +85,9 @@ static plKey CreateAndRefImageKey (unsigned nodeId, plMipmap * mipmap) { return key; } -// should only be created from C++ side -pyVaultImageNode::pyVaultImageNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -, fMipmapKey(nil) -, fMipmap(nil) -{ -} - //create from the Python side -pyVaultImageNode::pyVaultImageNode(int n) -: pyVaultNode(new RelVaultNode) -, fMipmapKey(nil) -, fMipmap(nil) +pyVaultImageNode::pyVaultImageNode() + : fMipmap(), pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_Image); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.h index a9c5981835..1ceb62bcd3 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNode.h @@ -63,20 +63,15 @@ class pyVaultImageNode : public pyVaultNode plMipmap * fMipmap; protected: - // should only be created from C++ side - pyVaultImageNode(RelVaultNode* nfsNode); - //create from the Python side - pyVaultImageNode(int n=0); - + pyVaultImageNode(); public: ~pyVaultImageNode (); // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultImageNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultImageNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultImageNode); // converts a PyObject to a pyVaultImageNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNodeGlue.cpp index 56b2bff746..5610792812 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultImageNodeGlue.cpp @@ -206,19 +206,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultImageNode, pyVaultNode, "Params: n=0\nPlasma vault image node"); // required functions for PyObject interoperability -PyObject *pyVaultImageNode::New(RelVaultNode* nfsNode) -{ - ptVaultImageNode *newObj = (ptVaultImageNode*)ptVaultImageNode_type.tp_new(&ptVaultImageNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultImageNode::New(int n /* =0 */) -{ - ptVaultImageNode *newObj = (ptVaultImageNode*)ptVaultImageNode_type.tp_new(&ptVaultImageNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultImageNode, pyVaultImageNode) PYTHON_CLASS_CHECK_IMPL(ptVaultImageNode, pyVaultImageNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultImageNode, pyVaultImageNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.cpp index bc10cdba53..4f5e9c81fb 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.cpp @@ -53,15 +53,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "plVault/plVault.h" #include "pnUUID/pnUUID.h" -// should only be created from C++ side -pyVaultMarkerGameNode::pyVaultMarkerGameNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side -pyVaultMarkerGameNode::pyVaultMarkerGameNode(int n) -: pyVaultNode(new RelVaultNode) +pyVaultMarkerGameNode::pyVaultMarkerGameNode() + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_MarkerGame); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.h index 05769e8c5a..e25c892801 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNode.h @@ -61,17 +61,13 @@ class plUUID; class pyVaultMarkerGameNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultMarkerGameNode(RelVaultNode* vaultNode); - //create from the Python side - pyVaultMarkerGameNode(int n=0); + pyVaultMarkerGameNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultMarkerGameNode); - static PyObject *New(RelVaultNode* vaultNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultMarkerGameNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultMarkerGameNode); // converts a PyObject to a pyVaultMarkerGameNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNodeGlue.cpp index 6abce1171c..45e513f0e4 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultMarkerGameNodeGlue.cpp @@ -156,19 +156,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultMarkerGameNode, pyVaultNode, "Params: n=0\nPlasma vault age info node"); // required functions for PyObject interoperability -PyObject *pyVaultMarkerGameNode::New(RelVaultNode* nfsNode) -{ - ptVaultMarkerGameNode *newObj = (ptVaultMarkerGameNode*)ptVaultMarkerGameNode_type.tp_new(&ptVaultMarkerGameNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultMarkerGameNode::New(int n /* =0 */) -{ - ptVaultMarkerGameNode *newObj = (ptVaultMarkerGameNode*)ptVaultMarkerGameNode_type.tp_new(&ptVaultMarkerGameNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultMarkerGameNode, pyVaultMarkerGameNode) PYTHON_CLASS_CHECK_IMPL(ptVaultMarkerGameNode, pyVaultMarkerGameNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultMarkerGameNode, pyVaultMarkerGameNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp index d017c2ad5c..ad037420ab 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp @@ -157,24 +157,23 @@ hsRef pyVaultNode::pyVaultNodeOperationCallback::GetNode() const { } pyVaultNode::pyVaultNode() + : fNode(new RelVaultNode, hsStealRef) { } -// should only be created from C++ side -pyVaultNode::pyVaultNode( RelVaultNode* nfsNode ) -: fNode(nfsNode) +pyVaultNode::pyVaultNode(std::nullptr_t) { } -pyVaultNode::~pyVaultNode() {} - +pyVaultNode::~pyVaultNode() +{ +} hsRef pyVaultNode::GetNode() const { return fNode; } - // override the equals to operator bool pyVaultNode::operator==(const pyVaultNode &vaultNode) const { @@ -243,21 +242,16 @@ uint32_t pyVaultNode::GetCreatorNodeID() PyObject* pyVaultNode::GetCreatorNode() { - PyObject * result = nil; - if (fNode) - { - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode plrInfo(templateNode); + if (fNode) { + RelVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode plrInfo(&templateNode); plrInfo.SetPlayerId(fNode->GetCreatorId()); - if (hsRef rvn = VaultGetNode(templateNode)) - result = pyVaultPlayerInfoNode::New(rvn); + if (hsRef rvn = VaultGetNode(&templateNode)) + return pyVaultPlayerInfoNode::New(rvn); } - - if (result) - return result; - + // just return a None object PYTHON_RETURN_NONE; } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h index 336a8ce7cd..c70c81b457 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h @@ -101,10 +101,9 @@ class pyVaultNode hsRef fNode; protected: - // only for python glue, do NOT call pyVaultNode(); - // should only be created from C++ side - pyVaultNode( RelVaultNode* node ); + + pyVaultNode(std::nullptr_t); public: virtual ~pyVaultNode(); @@ -112,7 +111,7 @@ class pyVaultNode // required functions for PyObject interoperability PYTHON_EXPOSE_TYPE; // so we can subclass PYTHON_CLASS_NEW_FRIEND(ptVaultNode); - static PyObject *New(RelVaultNode* node); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultNode); // converts a PyObject to a pyVaultNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp index 7bb626fe32..4dd6188643 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp @@ -525,13 +525,7 @@ PLASMA_CUSTOM_TYPE(ptVaultNode, "Vault node class"); PYTHON_EXPOSE_TYPE_DEFINITION(ptVaultNode, pyVaultNode); // required functions for PyObject interoperability -PyObject *pyVaultNode::New(RelVaultNode* nfsNode) -{ - ptVaultNode *newObj = (ptVaultNode*)ptVaultNode_type.tp_new(&ptVaultNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultNode, pyVaultNode); PYTHON_CLASS_CHECK_IMPL(ptVaultNode, pyVaultNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultNode, pyVaultNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeRef.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeRef.cpp index efde901fcf..ae501738d8 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeRef.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultNodeRef.cpp @@ -124,15 +124,15 @@ PyObject * pyVaultNodeRef::GetSaver () { if (hsRef child = VaultGetNode(fChild->GetNodeId())) { if (unsigned saverId = child->GetRefOwnerId(fParent->GetNodeId())) { // Find the player info node representing the saver - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(saverId); - saver = VaultGetNode(templateNode); + saver = VaultGetNode(&templateNode); if (!saver) { TArray nodeIds; - VaultFindNodesAndWait(templateNode, &nodeIds); + VaultFindNodesAndWait(&templateNode, &nodeIds); if (nodeIds.Count() > 0) { VaultFetchNodesAndWait(nodeIds.Ptr(), nodeIds.Count()); saver = VaultGetNode(nodeIds[0]); diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.cpp index 56f50add5f..3721d15ca1 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.cpp @@ -58,15 +58,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com # include "pyVault.h" #endif -// should only be created from C++ side -pyVaultPlayerInfoListNode::pyVaultPlayerInfoListNode(RelVaultNode* nfsNode) -: pyVaultFolderNode(nfsNode) -{ -} - //create from the Python side -pyVaultPlayerInfoListNode::pyVaultPlayerInfoListNode(int n) -: pyVaultFolderNode(n) +pyVaultPlayerInfoListNode::pyVaultPlayerInfoListNode() + : pyVaultFolderNode() { fNode->SetNodeType(plVault::kNodeType_PlayerInfoList); } @@ -79,14 +73,13 @@ bool pyVaultPlayerInfoListNode::HasPlayer( uint32_t playerID ) if (!fNode) return false; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(playerID); - - hsRef rvn = fNode->GetChildNode(templateNode, 1); - - return (rvn != nil); + + hsRef rvn = fNode->GetChildNode(&templateNode, 1); + return rvn != nullptr; } //================================================================== @@ -103,19 +96,19 @@ void pyVaultPlayerInfoListNode::AddPlayer( uint32_t playerID ) if (HasPlayer(playerID) || !fNode) return; - hsRef templateNode = new NetVaultNode(); - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(playerID); TArray nodeIds; - VaultLocalFindNodes(templateNode, &nodeIds); + VaultLocalFindNodes(&templateNode, &nodeIds); // So, if we know about this node, we can take it easy. If not, we lazy load it. if (nodeIds.Count()) VaultAddChildNode(fNode->GetNodeId(), nodeIds[0], VaultGetPlayerId(), nullptr, nullptr); else - VaultFindNodes(templateNode, IAddPlayer_NodesFound, (NetVaultNode *)fNode); + VaultFindNodes(&templateNode, IAddPlayer_NodesFound, (NetVaultNode *)fNode); } void pyVaultPlayerInfoListNode::RemovePlayer( uint32_t playerID ) @@ -123,12 +116,12 @@ void pyVaultPlayerInfoListNode::RemovePlayer( uint32_t playerID ) if (!fNode) return; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(playerID); - if (hsRef rvn = fNode->GetChildNode(templateNode, 1)) + if (hsRef rvn = fNode->GetChildNode(&templateNode, 1)) VaultRemoveChildNode(fNode->GetNodeId(), rvn->GetNodeId(), nil, nil); } @@ -137,19 +130,14 @@ PyObject * pyVaultPlayerInfoListNode::GetPlayer( uint32_t playerID ) if (!fNode) PYTHON_RETURN_NONE; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(playerID); - PyObject * result = nil; - if (hsRef rvn = fNode->GetChildNode(templateNode, 1)) - result = pyVaultPlayerInfoNode::New(rvn); - - if (!result) - PYTHON_RETURN_NONE; - - return result; + if (hsRef rvn = fNode->GetChildNode(&templateNode, 1)) + return pyVaultPlayerInfoNode::New(rvn); + PYTHON_RETURN_NONE; } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.h index a0511c9c0e..f4f124f265 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNode.h @@ -59,17 +59,13 @@ class pyVaultPlayerInfoNode; class pyVaultPlayerInfoListNode : public pyVaultFolderNode { protected: - // should only be created from C++ side - pyVaultPlayerInfoListNode(RelVaultNode* nfsNode); - //create from the Python side - pyVaultPlayerInfoListNode(int n=0); + pyVaultPlayerInfoListNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultPlayerInfoListNode); - static PyObject *New(RelVaultNode* nfsNode); - static PyObject *New(int n=0); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultPlayerInfoListNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultPlayerInfoListNode); // converts a PyObject to a pyVaultPlayerInfoListNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNodeGlue.cpp index 8fd12029aa..2c05ec2aa6 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoListNodeGlue.cpp @@ -173,22 +173,10 @@ PYTHON_START_METHODS_TABLE(ptVaultPlayerInfoListNode) PYTHON_END_METHODS_TABLE; // Type structure definition -PLASMA_DEFAULT_TYPE_WBASE(ptVaultPlayerInfoListNode, pyVaultFolderNode, "Params: n=0\nPlasma vault player info list node"); +PLASMA_DEFAULT_TYPE_WBASE(ptVaultPlayerInfoListNode, pyVaultFolderNode, "Plasma vault player info list node"); // required functions for PyObject interoperability -PyObject *pyVaultPlayerInfoListNode::New(RelVaultNode* nfsNode) -{ - ptVaultPlayerInfoListNode *newObj = (ptVaultPlayerInfoListNode*)ptVaultPlayerInfoListNode_type.tp_new(&ptVaultPlayerInfoListNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} - -PyObject *pyVaultPlayerInfoListNode::New(int n /* =0 */) -{ - ptVaultPlayerInfoListNode *newObj = (ptVaultPlayerInfoListNode*)ptVaultPlayerInfoListNode_type.tp_new(&ptVaultPlayerInfoListNode_type, NULL, NULL); - // oddly enough, nothing to do here - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultPlayerInfoListNode, pyVaultPlayerInfoListNode) PYTHON_CLASS_CHECK_IMPL(ptVaultPlayerInfoListNode, pyVaultPlayerInfoListNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultPlayerInfoListNode, pyVaultPlayerInfoListNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.cpp index 9a71a80dcf..97ac225976 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.cpp @@ -54,15 +54,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com # include "pyVault.h" #endif -// should only be created from C++ side -pyVaultPlayerInfoNode::pyVaultPlayerInfoNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side pyVaultPlayerInfoNode::pyVaultPlayerInfoNode() -: pyVaultNode(new RelVaultNode) + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_PlayerInfo); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.h index b6fc4b09bb..7984c6f362 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNode.h @@ -56,9 +56,6 @@ class plUUID; class pyVaultPlayerInfoNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultPlayerInfoNode(RelVaultNode * node); - //create from the Python side pyVaultPlayerInfoNode(); @@ -67,8 +64,7 @@ class pyVaultPlayerInfoNode : public pyVaultNode // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultPlayerInfoNode); - PYTHON_CLASS_NEW_DEFINITION; - static PyObject *New(RelVaultNode * node); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultPlayerInfoNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultPlayerInfoNode); // converts a PyObject to a pyVaultPlayerInfoNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNodeGlue.cpp index 6528e47acd..ee07543b43 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerInfoNodeGlue.cpp @@ -166,14 +166,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultPlayerInfoNode, pyVaultNode, "Plasma vault folder node"); // required functions for PyObject interoperability -PYTHON_CLASS_NEW_IMPL(ptVaultPlayerInfoNode, pyVaultPlayerInfoNode) - -PyObject *pyVaultPlayerInfoNode::New(RelVaultNode* nfsNode) -{ - ptVaultPlayerInfoNode *newObj = (ptVaultPlayerInfoNode*)ptVaultPlayerInfoNode_type.tp_new(&ptVaultPlayerInfoNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultPlayerInfoNode, pyVaultPlayerInfoNode) PYTHON_CLASS_CHECK_IMPL(ptVaultPlayerInfoNode, pyVaultPlayerInfoNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultPlayerInfoNode, pyVaultPlayerInfoNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp index 9f4291b456..44d96574e8 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp @@ -64,23 +64,16 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com //============================================================================ static PyObject * GetPlayerVaultFolder (unsigned folderType) { - PyObject * result = nil; if (hsRef rvnPlr = VaultGetPlayerNode()) { if (hsRef rvnFldr = rvnPlr->GetChildFolderNode(folderType, 1)) - result = pyVaultFolderNode::New(rvnFldr); + return pyVaultFolderNode::New(rvnFldr); } - - return result; -} - -pyVaultPlayerNode::pyVaultPlayerNode(RelVaultNode *nfsNode) -: pyVaultNode(nfsNode) -{ + return nullptr; } //create from the Python side pyVaultPlayerNode::pyVaultPlayerNode() -: pyVaultNode(nil) // may not create player nodes from python + : pyVaultNode(nullptr) { } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.h index 73c134297d..e13ffc70fc 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.h @@ -57,17 +57,13 @@ struct RelVaultNode; class pyVaultPlayerNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultPlayerNode(RelVaultNode *nfsNode); - //create from the Python side pyVaultPlayerNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultPlayerNode); - PYTHON_CLASS_NEW_DEFINITION; - static PyObject *New(RelVaultNode *nfsNode); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultPlayerNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultPlayerNode); // converts a PyObject to a pyVaultPlayerNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNodeGlue.cpp index 09dec09358..e3a8103de1 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNodeGlue.cpp @@ -316,14 +316,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultPlayerNode, pyVaultNode, "Plasma vault player node"); // required functions for PyObject interoperability -PYTHON_CLASS_NEW_IMPL(ptVaultPlayerNode, pyVaultPlayerNode) - -PyObject *pyVaultPlayerNode::New(RelVaultNode* nfsNode) -{ - ptVaultPlayerNode *newObj = (ptVaultPlayerNode*)ptVaultPlayerNode_type.tp_new(&ptVaultPlayerNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultPlayerNode, pyVaultPlayerNode) PYTHON_CLASS_CHECK_IMPL(ptVaultPlayerNode, pyVaultPlayerNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultPlayerNode, pyVaultPlayerNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.cpp index bbc0ac1dc9..edb004e201 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.cpp @@ -53,15 +53,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pySDL.h" #include "plVault/plVault.h" -// should only be created from C++ side -pyVaultSDLNode::pyVaultSDLNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side pyVaultSDLNode::pyVaultSDLNode() -: pyVaultNode(new RelVaultNode) + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_SDL); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.h index 7f0afd06a2..782317949e 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNode.h @@ -59,17 +59,13 @@ class pySDLStateDataRecord; class pyVaultSDLNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultSDLNode(RelVaultNode* nfsNode); - //create from the Python side pyVaultSDLNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultSDLNode); - PYTHON_CLASS_NEW_DEFINITION; - static PyObject *New(RelVaultNode* nfsNode); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultSDLNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultSDLNode); // converts a PyObject to a pyVaultSDLNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNodeGlue.cpp index 5b5f94e081..0ac06c8b41 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSDLNodeGlue.cpp @@ -124,14 +124,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultSDLNode, pyVaultNode, "Plasma vault SDL node"); // required functions for PyObject interoperability -PYTHON_CLASS_NEW_IMPL(ptVaultSDLNode, pyVaultSDLNode) - -PyObject *pyVaultSDLNode::New(RelVaultNode* nfsNode) -{ - ptVaultSDLNode *newObj = (ptVaultSDLNode*)ptVaultSDLNode_type.tp_new(&ptVaultSDLNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultSDLNode, pyVaultSDLNode) PYTHON_CLASS_CHECK_IMPL(ptVaultSDLNode, pyVaultSDLNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultSDLNode, pyVaultSDLNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.cpp index dbcadd1544..eaf4a3718a 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.cpp @@ -48,21 +48,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #pragma hdrstop #include "pyVaultSystemNode.h" -#include "pyVaultAgeLinkNode.h" -#include "pyVaultFolderNode.h" #include "plVault/plVault.h" -#ifndef BUILDING_PYPLASMA -# include "pyVault.h" -#endif - -// should only be created from C++ side -pyVaultSystemNode::pyVaultSystemNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} //create from the Python side pyVaultSystemNode::pyVaultSystemNode() -: pyVaultNode(nil) // may not create this node type from python + : pyVaultNode(nullptr) // may not create this node type from python { } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.h index 54b48fe82e..209dcb8107 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNode.h @@ -56,17 +56,13 @@ struct RelVaultNode; class pyVaultSystemNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultSystemNode(RelVaultNode* nfsNode); - //create from the Python side pyVaultSystemNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultSystemNode); - PYTHON_CLASS_NEW_DEFINITION; - static PyObject *New(RelVaultNode* nfsNode); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultSystemNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultSystemNode); // converts a PyObject to a pyVaultSystemNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNodeGlue.cpp index 02bf1910f2..490c95c68c 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultSystemNodeGlue.cpp @@ -65,14 +65,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultSystemNode, pyVaultNode, "Plasma vault system node"); // required functions for PyObject interoperability -PYTHON_CLASS_NEW_IMPL(ptVaultSystemNode, pyVaultSystemNode) - -PyObject *pyVaultSystemNode::New(RelVaultNode* nfsNode) -{ - ptVaultSystemNode *newObj = (ptVaultSystemNode*)ptVaultSystemNode_type.tp_new(&ptVaultSystemNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultSystemNode, pyVaultSystemNode) PYTHON_CLASS_CHECK_IMPL(ptVaultSystemNode, pyVaultSystemNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultSystemNode, pyVaultSystemNode) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.cpp index 1a7476d91f..f16b985a79 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.cpp @@ -56,15 +56,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com # include "pyVault.h" #endif -// should only be created from C++ side -pyVaultTextNoteNode::pyVaultTextNoteNode(RelVaultNode* nfsNode) -: pyVaultNode(nfsNode) -{ -} - //create from the Python side pyVaultTextNoteNode::pyVaultTextNoteNode() -: pyVaultNode(new RelVaultNode) + : pyVaultNode() { fNode->SetNodeType(plVault::kNodeType_TextNote); } diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.h b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.h index d964b6d112..bd68aaea4c 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.h +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNode.h @@ -58,17 +58,13 @@ class pyVaultAgeLinkNode; class pyVaultTextNoteNode : public pyVaultNode { protected: - // should only be created from C++ side - pyVaultTextNoteNode(RelVaultNode* nfsNode); - //create from the Python side pyVaultTextNoteNode(); public: // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptVaultTextNoteNode); - PYTHON_CLASS_NEW_DEFINITION; - static PyObject *New(RelVaultNode* nfsNode); + PYTHON_CLASS_VAULT_NODE_NEW_DEFINITION; PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVaultTextNoteNode object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVaultTextNoteNode); // converts a PyObject to a pyVaultTextNoteNode (throws error if not correct type) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNodeGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNodeGlue.cpp index b8d0516025..92518cdb27 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNodeGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultTextNoteNodeGlue.cpp @@ -291,14 +291,7 @@ PYTHON_END_METHODS_TABLE; PLASMA_DEFAULT_TYPE_WBASE(ptVaultTextNoteNode, pyVaultNode, "Plasma vault text note node"); // required functions for PyObject interoperability -PYTHON_CLASS_NEW_IMPL(ptVaultTextNoteNode, pyVaultTextNoteNode) - -PyObject *pyVaultTextNoteNode::New(RelVaultNode* nfsNode) -{ - ptVaultTextNoteNode *newObj = (ptVaultTextNoteNode*)ptVaultTextNoteNode_type.tp_new(&ptVaultTextNoteNode_type, NULL, NULL); - newObj->fThis->fNode = nfsNode; - return (PyObject*)newObj; -} +PYTHON_CLASS_VAULT_NODE_NEW_IMPL(ptVaultTextNoteNode, pyVaultTextNoteNode) PYTHON_CLASS_CHECK_IMPL(ptVaultTextNoteNode, pyVaultTextNoteNode) PYTHON_CLASS_CONVERT_FROM_IMPL(ptVaultTextNoteNode, pyVaultTextNoteNode) diff --git a/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp b/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp index 924524c3bc..6a3b05ea2b 100644 --- a/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp +++ b/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp @@ -750,12 +750,11 @@ struct VaultFetchNodeTrans : NetAuthTrans { //============================================================================ struct VaultFindNodeTrans : NetAuthTrans { + TArray m_buffer; TArray m_nodeIds; FNetCliAuthVaultNodeFind m_callback; void * m_param; - - hsRef m_node; - + VaultFindNodeTrans ( NetVaultNode * templateNode, FNetCliAuthVaultNodeFind callback, @@ -776,12 +775,11 @@ struct VaultFindNodeTrans : NetAuthTrans { //============================================================================ struct VaultCreateNodeTrans : NetAuthTrans { - hsRef m_templateNode; + TArray m_buffer; FNetCliAuthVaultNodeCreated m_callback; void * m_param; - unsigned m_nodeId; - + VaultCreateNodeTrans ( NetVaultNode * templateNode, FNetCliAuthVaultNodeCreated callback, @@ -3978,7 +3976,7 @@ bool VaultFetchNodeTrans::Recv ( const Auth2Cli_VaultNodeFetched & reply = *(const Auth2Cli_VaultNodeFetched *) msg; if (IS_NET_SUCCESS(reply.result)) { - m_node = new NetVaultNode; + m_node.Steal(new NetVaultNode); m_node->Read(reply.nodeBuffer, reply.nodeBytes); } @@ -4003,27 +4001,22 @@ VaultFindNodeTrans::VaultFindNodeTrans ( ) : NetAuthTrans(kVaultFindNodeTrans) , m_callback(callback) , m_param(param) -, m_node(templateNode) { + templateNode->Write(&m_buffer, 0); } //============================================================================ bool VaultFindNodeTrans::Send () { if (!AcquireConn()) return false; - - TArray buffer; - m_node->Write(&buffer); const uintptr_t msg[] = { - kCli2Auth_VaultNodeFind, - m_transId, - buffer.Count(), - (uintptr_t) buffer.Ptr(), + kCli2Auth_VaultNodeFind, + m_transId, + m_buffer.Count(), + (uintptr_t)m_buffer.Ptr(), }; - m_conn->Send(msg, std::size(msg)); - return true; } @@ -4068,30 +4061,25 @@ VaultCreateNodeTrans::VaultCreateNodeTrans ( FNetCliAuthVaultNodeCreated callback, void * param ) : NetAuthTrans(kVaultCreateNodeTrans) -, m_templateNode(templateNode) , m_callback(callback) , m_param(param) , m_nodeId(0) { + templateNode->Write(&m_buffer, 0); } //============================================================================ bool VaultCreateNodeTrans::Send () { if (!AcquireConn()) return false; - - TArray buffer; - m_templateNode->Write(&buffer, 0); const uintptr_t msg[] = { - kCli2Auth_VaultNodeCreate, - m_transId, - buffer.Count(), - (uintptr_t) buffer.Ptr() + kCli2Auth_VaultNodeCreate, + m_transId, + m_buffer.Count(), + (uintptr_t)m_buffer.Ptr() }; - m_conn->Send(msg, std::size(msg)); - return true; } diff --git a/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp b/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp index dbb844acdd..f2e55de74f 100644 --- a/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp +++ b/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp @@ -81,14 +81,14 @@ struct RelVaultNodeLink : THashKeyVal { hsRef node; unsigned ownerId; bool seen; - + + RelVaultNodeLink(bool seen, unsigned ownerId, unsigned nodeId) + : THashKeyVal(nodeId), node(new RelVaultNode, hsStealRef), ownerId(ownerId), seen(seen) + { } + RelVaultNodeLink (bool seen, unsigned ownerId, unsigned nodeId, RelVaultNode * node) - : THashKeyVal(nodeId) - , node(node) - , ownerId(ownerId) - , seen(seen) - { - } + : THashKeyVal(nodeId), node(node), ownerId(ownerId), seen(seen) + { } }; @@ -347,7 +347,7 @@ static void BuildNodeTree ( RelVaultNodeLink * parentLink = s_nodes.Find(refs[i].parentId); if (!parentLink) { newNodeIds->Add(refs[i].parentId); - parentLink = new RelVaultNodeLink(false, 0, refs[i].parentId, new RelVaultNode); + parentLink = new RelVaultNodeLink(false, 0, refs[i].parentId); parentLink->node->SetNodeId_NoDirty(refs[i].parentId); s_nodes.Add(parentLink); } @@ -357,7 +357,7 @@ static void BuildNodeTree ( RelVaultNodeLink * childLink = s_nodes.Find(refs[i].childId); if (!childLink) { newNodeIds->Add(refs[i].childId); - childLink = new RelVaultNodeLink(refs[i].seen, refs[i].ownerId, refs[i].childId, new RelVaultNode); + childLink = new RelVaultNodeLink(refs[i].seen, refs[i].ownerId, refs[i].childId); childLink->node->SetNodeId_NoDirty(refs[i].childId); s_nodes.Add(childLink); } @@ -422,18 +422,18 @@ static void FetchRefOwners ( ownerIds.Add(ownerId); } QSORT(unsigned, ownerIds.Ptr(), ownerIds.Count(), elem1 < elem2); - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); { unsigned prevId = 0; for (unsigned i = 0; i < ownerIds.Count(); ++i) { if (ownerIds[i] != prevId) { prevId = ownerIds[i]; - VaultPlayerInfoNode access(templateNode); + VaultPlayerInfoNode access(&templateNode); access.SetPlayerId(refs[i].ownerId); - if (VaultGetNode(templateNode)) + if (VaultGetNode(&templateNode)) continue; NetCliAuthVaultNodeFind( - templateNode, + &templateNode, VaultNodeFound, nil ); @@ -523,7 +523,7 @@ static void VaultNodeFetched ( // Add to global node table RelVaultNodeLink * link = s_nodes.Find(node->GetNodeId()); if (!link) { - link = new RelVaultNodeLink(false, 0, node->GetNodeId(), new RelVaultNode()); + link = new RelVaultNodeLink(false, 0, node->GetNodeId()); link->node->SetNodeId_NoDirty(node->GetNodeId()); s_nodes.Add(link); } @@ -1215,9 +1215,9 @@ hsRef RelVaultNode::GetChildNode ( unsigned nodeType, unsigned maxDepth ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(nodeType); - return GetChildNode(templateNode, maxDepth); + NetVaultNode templateNode; + templateNode.SetNodeType(nodeType); + return GetChildNode(&templateNode, maxDepth); } //============================================================================ @@ -1225,11 +1225,11 @@ hsRef RelVaultNode::GetChildFolderNode ( unsigned folderType, unsigned maxDepth ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Folder); - VaultFolderNode folder(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Folder); + VaultFolderNode folder(&templateNode); folder.SetFolderType(folderType); - return GetChildNode(templateNode, maxDepth); + return GetChildNode(&templateNode, maxDepth); } //============================================================================ @@ -1237,11 +1237,11 @@ hsRef RelVaultNode::GetChildPlayerInfoListNode ( unsigned folderType, unsigned maxDepth ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfoList); - VaultPlayerInfoListNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfoList); + VaultPlayerInfoListNode access(&templateNode); access.SetFolderType(folderType); - return GetChildNode(templateNode, maxDepth); + return GetChildNode(&templateNode, maxDepth); } //============================================================================ @@ -1249,11 +1249,11 @@ hsRef RelVaultNode::GetChildAgeInfoListNode ( unsigned folderType, unsigned maxDepth ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfoList); - VaultAgeInfoListNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfoList); + VaultAgeInfoListNode access(&templateNode); access.SetFolderType(folderType); - return GetChildNode(templateNode, maxDepth); + return GetChildNode(&templateNode, maxDepth); } //============================================================================ @@ -1301,10 +1301,10 @@ void RelVaultNode::GetChildNodes ( unsigned maxDepth, RelVaultNode::RefList * nodes ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(nodeType); + NetVaultNode templateNode; + templateNode.SetNodeType(nodeType); GetChildNodes( - templateNode, + &templateNode, maxDepth, nodes ); @@ -1316,12 +1316,12 @@ void RelVaultNode::GetChildFolderNodes ( unsigned maxDepth, RelVaultNode::RefList * nodes ) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Folder); - VaultFolderNode fldr(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Folder); + VaultFolderNode fldr(&templateNode); fldr.SetFolderType(folderType); GetChildNodes( - templateNode, + &templateNode, maxDepth, nodes ); @@ -1443,14 +1443,13 @@ hsRef RelVaultNode::GetParentAgeLink () { ASSERT(GetNodeType() == plVault::kNodeType_AgeInfo); hsRef result; - - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeLink); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeLink); // Get our parent AgeLink node - if (hsRef rvnLink = GetParentNode(templateNode, 1)) { + if (hsRef rvnLink = GetParentNode(&templateNode, 1)) { // Get the next AgeLink node in our parent tree - result = rvnLink->GetParentNode(templateNode, 3); + result = rvnLink->GetParentNode(&templateNode, 3); } return result; @@ -1571,7 +1570,7 @@ void VaultAddChildNode ( if (RelVaultNodeLink * parentLink = s_nodes.Find(parentId)) { RelVaultNodeLink * childLink = s_nodes.Find(childId); if (!childLink) { - childLink = new RelVaultNodeLink(false, ownerId, childId, new RelVaultNode); + childLink = new RelVaultNodeLink(false, ownerId, childId); childLink->node->SetNodeId_NoDirty(childId); s_nodes.Add(childLink); } @@ -1829,11 +1828,11 @@ void VaultCreateNode ( void * state, void * param ) { - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(nodeType); - + NetVaultNode templateNode; + templateNode.SetNodeType(nodeType); + VaultCreateNode( - templateNode, + &templateNode, callback, state, param @@ -1893,10 +1892,10 @@ hsRef VaultCreateNodeAndWait ( plVault::NodeTypes nodeType, ENetError * result ) { - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(nodeType); + NetVaultNode templateNode; + templateNode.SetNodeType(nodeType); - return VaultCreateNodeAndWait(templateNode, result); + return VaultCreateNodeAndWait(&templateNode, result); } //============================================================================ @@ -2090,11 +2089,11 @@ void VaultInitAge ( //============================================================================ static hsRef GetPlayerNode () { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_VNodeMgrPlayer); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_VNodeMgrPlayer); if (NetCommGetPlayer()) - templateNode->SetNodeId(NetCommGetPlayer()->playerInt); - return VaultGetNode(templateNode); + templateNode.SetNodeId(NetCommGetPlayer()->playerInt); + return VaultGetNode(&templateNode); } //============================================================================ @@ -2117,13 +2116,13 @@ hsRef VaultGetPlayerInfoNode () { if (!rvnPlr) return nullptr; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode plrInfo(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode plrInfo(&templateNode); plrInfo.SetPlayerId(rvnPlr->GetNodeId()); hsRef result; - if (hsRef rvnPlrInfo = rvnPlr->GetChildNode(templateNode, 1)) + if (hsRef rvnPlrInfo = rvnPlr->GetChildNode(&templateNode, 1)) result = rvnPlrInfo; return result; @@ -2177,14 +2176,14 @@ bool VaultGetLinkToMyNeighborhood (plAgeLinkStruct * link) { if (!rvnFldr) return false; - hsRef templateNode = new NetVaultNode; - - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + NetVaultNode templateNode; + + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(kNeighborhoodAgeFilename); hsRef node; - if (node = rvnFldr->GetChildNode(templateNode, 2)) { + if (node = rvnFldr->GetChildNode(&templateNode, 2)) { VaultAgeInfoNode info(node); info.CopyTo(link->GetAgeInfo()); } @@ -2198,14 +2197,14 @@ bool VaultGetLinkToMyPersonalAge (plAgeLinkStruct * link) { if (!rvnFldr) return false; - hsRef templateNode = new NetVaultNode; + NetVaultNode templateNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(kPersonalAgeFilename); hsRef node; - if (node = rvnFldr->GetChildNode(templateNode, 2)) { + if (node = rvnFldr->GetChildNode(&templateNode, 2)) { VaultAgeInfoNode info(node); info.CopyTo(link->GetAgeInfo()); } @@ -2219,14 +2218,14 @@ bool VaultGetLinkToCity (plAgeLinkStruct * link) { if (!rvnFldr) return false; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(kCityAgeFilename); hsRef node; - if (node = rvnFldr->GetChildNode(templateNode, 2)) { + if (node = rvnFldr->GetChildNode(&templateNode, 2)) { VaultAgeInfoNode info(node); info.CopyTo(link->GetAgeInfo()); } @@ -2236,15 +2235,14 @@ bool VaultGetLinkToCity (plAgeLinkStruct * link) { //============================================================================ hsRef VaultGetOwnedAgeLink (const plAgeInfoStruct * info) { - hsRef rvnLink; - + if (hsRef rvnFldr = VaultGetAgesIOwnFolder()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); if (info->HasAgeFilename()) { ageInfo.SetAgeFilename(info->GetAgeFilename()); } @@ -2252,10 +2250,10 @@ hsRef VaultGetOwnedAgeLink (const plAgeInfoStruct * info) { ageInfo.SetAgeInstanceGuid(*info->GetAgeInstanceGuid()); } - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_AgeLink); - rvnLink = rvnInfo->GetParentNode(templateNode, 1); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_AgeLink); + rvnLink = rvnInfo->GetParentNode(&templateNode, 1); } } @@ -2264,14 +2262,12 @@ hsRef VaultGetOwnedAgeLink (const plAgeInfoStruct * info) { //============================================================================ hsRef VaultGetOwnedAgeInfo (const plAgeInfoStruct * info) { - hsRef rvnInfo; if (hsRef rvnFldr = VaultGetAgesIOwnFolder()) { + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); if (info->HasAgeFilename()) { ageInfo.SetAgeFilename(info->GetAgeFilename()); } @@ -2279,7 +2275,7 @@ hsRef VaultGetOwnedAgeInfo (const plAgeInfoStruct * info) { ageInfo.SetAgeInstanceGuid(*info->GetAgeInstanceGuid()); } - rvnInfo = rvnFldr->GetChildNode(templateNode, 2); + rvnInfo = rvnFldr->GetChildNode(&templateNode, 2); } return rvnInfo; } @@ -2321,17 +2317,17 @@ bool VaultAddOwnedAgeSpawnPoint (const plUUID& ageInstId, const plSpawnPointInfo TArray nodeIds; fldr->GetChildNodeIds(&nodeIds, 1); - - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode access(templateNode); + + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode access(&templateNode); access.SetAgeInstanceGuid(ageInstId); for (unsigned i = 0; i < nodeIds.Count(); ++i) { link = VaultGetNode(nodeIds[i]); if (!link) continue; - if (link->GetChildNode(templateNode, 1)) { + if (link->GetChildNode(&templateNode, 1)) { VaultAgeLinkNode access(link); access.AddSpawnPoint(spawnPt); link = nullptr; @@ -2375,13 +2371,11 @@ bool VaultSetAgePublicAndWait (NetVaultNode * ageInfoNode, bool publicOrNot) { //============================================================================ hsRef VaultGetVisitAgeLink (const plAgeInfoStruct * info) { hsRef rvnLink; - if (hsRef rvnFldr = VaultGetAgesICanVisitFolder()) { + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); if (info->HasAgeFilename()) { ageInfo.SetAgeFilename(info->GetAgeFilename()); } @@ -2389,10 +2383,10 @@ hsRef VaultGetVisitAgeLink (const plAgeInfoStruct * info) { ageInfo.SetAgeInstanceGuid(*info->GetAgeInstanceGuid()); } - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_AgeLink); - rvnLink = rvnInfo->GetParentNode(templateNode, 1); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_AgeLink); + rvnLink = rvnInfo->GetParentNode(&templateNode, 1); } } @@ -3236,13 +3230,13 @@ hsRef VaultFindChronicleEntry (const ST::string& entryName, int en hsRef result; if (hsRef rvnFldr = GetChildFolderNode(GetPlayerNode(), plVault::kChronicleFolder, 1)) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Chronicle); - VaultChronicleNode chrn(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Chronicle); + VaultChronicleNode chrn(&templateNode); chrn.SetEntryName(entryName); if (entryType >= 0) chrn.SetEntryType(entryType); - if (hsRef rvnChrn = rvnFldr->GetChildNode(templateNode, 255)) + if (hsRef rvnChrn = rvnFldr->GetChildNode(&templateNode, 255)) result = rvnChrn; } return result; @@ -3266,14 +3260,14 @@ void VaultAddChronicleEntryAndWait ( chrnNode.SetEntryValue(entryValue); } else if (hsRef rvnFldr = GetChildFolderNode(GetPlayerNode(), plVault::kChronicleFolder, 1)) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Chronicle); - VaultChronicleNode chrnNode(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Chronicle); + VaultChronicleNode chrnNode(&templateNode); chrnNode.SetEntryName(entryName); chrnNode.SetEntryType(entryType); chrnNode.SetEntryValue(entryValue); ENetError result; - if (hsRef rvnChrn = VaultCreateNodeAndWait(templateNode, &result)) + if (hsRef rvnChrn = VaultCreateNodeAndWait(&templateNode, &result)) VaultAddChildNode(rvnFldr->GetNodeId(), rvnChrn->GetNodeId(), 0, nil, nil); } } @@ -3282,12 +3276,12 @@ void VaultAddChronicleEntryAndWait ( bool VaultAmIgnoringPlayer (unsigned playerId) { bool retval = false; if (hsRef rvnFldr = GetChildPlayerInfoListNode(GetPlayerNode(), plVault::kIgnoreListFolder, 1)) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); - VaultPlayerInfoNode pinfoNode(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_PlayerInfo); + VaultPlayerInfoNode pinfoNode(&templateNode); pinfoNode.SetPlayerId(playerId); - if (rvnFldr->GetChildNode(templateNode, 1)) + if (rvnFldr->GetChildNode(&templateNode, 1)) retval = true; } @@ -3470,11 +3464,11 @@ void VaultProcessPlayerInbox () { if (hsRef rvnInbox = VaultGetPlayerInboxFolder()) { { // Process new visit requests RelVaultNode::RefList visits; - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode tmpAcc(templateNode); + RelVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode tmpAcc(&templateNode); tmpAcc.SetNoteType(plVault::kNoteType_Visit); - rvnInbox->GetChildNodes(templateNode, 1, &visits); + rvnInbox->GetChildNodes(&templateNode, 1, &visits); for (const hsRef &rvnVisit : visits) { VaultTextNoteNode visitAcc(rvnVisit); @@ -3489,11 +3483,11 @@ void VaultProcessPlayerInbox () { } { // Process new unvisit requests RelVaultNode::RefList unvisits; - hsRef templateNode = new RelVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode tmpAcc(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode tmpAcc(&templateNode); tmpAcc.SetNoteType(plVault::kNoteType_UnVisit); - rvnInbox->GetChildNodes(templateNode, 1, &unvisits); + rvnInbox->GetChildNodes(&templateNode, 1, &unvisits); for (const hsRef &rvnUnVisit : unvisits) { VaultTextNoteNode unvisitAcc(rvnUnVisit); @@ -3518,23 +3512,20 @@ void VaultProcessPlayerInbox () { //============================================================================ static hsRef GetAgeNode () { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_VNodeMgrAge); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_VNodeMgrAge); if (NetCommGetAge()) - templateNode->SetNodeId(NetCommGetAge()->ageVaultId); - return VaultGetNode(templateNode); + templateNode.SetNodeId(NetCommGetAge()->ageVaultId); + return VaultGetNode(&templateNode); } //============================================================================ hsRef VaultGetAgeNode () { - hsRef result; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_VNodeMgrAge); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_VNodeMgrAge); if (NetCommGetAge()) - templateNode->SetNodeId(NetCommGetAge()->ageVaultId); - if (hsRef rvnAge = VaultGetNode(templateNode)) - result = rvnAge; - return result; + templateNode.SetNodeId(NetCommGetAge()->ageVaultId); + return VaultGetNode(&templateNode); } //============================================================================ @@ -3543,16 +3534,10 @@ static hsRef GetAgeInfoNode () { if (!rvnAge) return nullptr; - hsRef result; - hsRef templateNode = new NetVaultNode; - - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - templateNode->SetCreatorId(rvnAge->GetNodeId()); - - if (hsRef rvnAgeInfo = rvnAge->GetChildNode(templateNode, 1)) - result = rvnAgeInfo; - - return result; + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + templateNode.SetCreatorId(rvnAge->GetNodeId()); + return rvnAge->GetChildNode(&templateNode, 1); } //============================================================================ @@ -3561,15 +3546,10 @@ hsRef VaultGetAgeInfoNode () { if (!rvnAge) return nullptr; - hsRef result; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - templateNode->SetCreatorId(rvnAge->GetNodeId()); - - if (hsRef rvnAgeInfo = rvnAge->GetChildNode(templateNode, 1)) - result = rvnAgeInfo; - - return result; + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); + templateNode.SetCreatorId(rvnAge->GetNodeId()); + return rvnAge->GetChildNode(&templateNode, 1); } //============================================================================ @@ -3630,19 +3610,17 @@ hsRef VaultAgeGetBookshelfFolder () { //============================================================================ hsRef VaultFindAgeSubAgeLink (const plAgeInfoStruct * info) { hsRef rvnLink; - if (hsRef rvnFldr = VaultGetAgeSubAgesFolder()) { + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(info->GetAgeFilename()); - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_AgeLink); - rvnLink = rvnInfo->GetParentNode(templateNode, 1); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_AgeLink); + rvnLink = rvnInfo->GetParentNode(&templateNode, 1); } } @@ -3695,11 +3673,11 @@ hsRef VaultAgeAddDeviceAndWait (const ST::string& deviceName) { //============================================================================ void VaultAgeRemoveDevice (const ST::string& deviceName) { if (hsRef folder = VaultGetAgeDevicesFolder()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode access(&templateNode); access.SetNoteTitle(deviceName); - if (hsRef device = folder->GetChildNode(templateNode, 1)) { + if (hsRef device = folder->GetChildNode(&templateNode, 1)) { VaultRemoveChildNode(folder->GetNodeId(), device->GetNodeId(), nil, nil); auto it = s_ageDeviceInboxes.find(deviceName); @@ -3711,27 +3689,26 @@ void VaultAgeRemoveDevice (const ST::string& deviceName) { //============================================================================ bool VaultAgeHasDevice (const ST::string& deviceName) { - bool found = false; if (hsRef folder = VaultGetAgeDevicesFolder()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode access(&templateNode); access.SetNoteTitle(deviceName); - if (folder->GetChildNode(templateNode, 1)) - found = true; + if (folder->GetChildNode(&templateNode, 1)) + return true; } - return found; + return false; } //============================================================================ hsRef VaultAgeGetDevice (const ST::string& deviceName) { hsRef result; if (hsRef folder = VaultGetAgeDevicesFolder()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_TextNote); - VaultTextNoteNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_TextNote); + VaultTextNoteNode access(&templateNode); access.SetNoteTitle(deviceName); - if (hsRef device = folder->GetChildNode(templateNode, 1)) + if (hsRef device = folder->GetChildNode(&templateNode, 1)) result = device; } return result; @@ -3786,12 +3763,12 @@ hsRef VaultAgeGetDeviceInbox (const ST::string& deviceName) { parentNode = VaultGetGlobalInbox(); if (parentNode) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Folder); - VaultFolderNode access(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Folder); + VaultFolderNode access(&templateNode); access.SetFolderType(plVault::kDeviceInboxFolder); access.SetFolderName(it->second); - result = parentNode->GetChildNode(templateNode, 1); + result = parentNode->GetChildNode(&templateNode, 1); } } return result; @@ -3836,21 +3813,18 @@ unsigned VaultAgeGetAgeTime () { //============================================================================ hsRef VaultGetSubAgeLink (const plAgeInfoStruct * info) { - hsRef rvnLink; - if (hsRef rvnFldr = VaultGetAgeSubAgesFolder()) { + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); - - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(info->GetAgeFilename()); - if (hsRef rvnInfo = rvnFldr->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_AgeLink); - rvnLink = rvnInfo->GetParentNode(templateNode, 1); + if (hsRef rvnInfo = rvnFldr->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_AgeLink); + rvnLink = rvnInfo->GetParentNode(&templateNode, 1); } } @@ -4276,16 +4250,16 @@ bool VaultAgeFindOrCreateChildAgeLinkAndWait ( // Check for existing child age in folder hsRef rvnLink; - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_AgeInfo); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode ageInfo(templateNode); + VaultAgeInfoNode ageInfo(&templateNode); ageInfo.SetAgeFilename(info->GetAgeFilename()); - if (hsRef rvnInfo = rvnChildAges->GetChildNode(templateNode, 2)) { - templateNode->Clear(); - templateNode->SetNodeType(plVault::kNodeType_AgeLink); - rvnLink = rvnInfo->GetParentNode(templateNode, 1); + if (hsRef rvnInfo = rvnChildAges->GetChildNode(&templateNode, 2)) { + templateNode.Clear(); + templateNode.SetNodeType(plVault::kNodeType_AgeLink); + rvnLink = rvnInfo->GetParentNode(&templateNode, 1); } if (rvnLink) { @@ -4523,12 +4497,12 @@ uint8_t VaultAgeFindOrCreateChildAgeLink( uint8_t retval = hsFail; if (hsRef rvnChildAges = rvnParentInfo->GetChildAgeInfoListNode(plVault::kChildAgesFolder, 1)) { // Search for our age - hsRef temp = new NetVaultNode; - temp->SetNodeType(plVault::kNodeType_AgeInfo); - VaultAgeInfoNode theAge(temp); + NetVaultNode temp; + temp.SetNodeType(plVault::kNodeType_AgeInfo); + VaultAgeInfoNode theAge(&temp); theAge.SetAgeFilename(info->GetAgeFilename()); - if (hsRef rvnAgeInfo = rvnChildAges->GetChildNode(temp, 2)) { + if (hsRef rvnAgeInfo = rvnChildAges->GetChildNode(&temp, 2)) { hsRef rvnAgeLink = rvnAgeInfo->GetParentAgeLink(); VaultAgeLinkNode accAgeLink(rvnAgeLink); @@ -4676,9 +4650,9 @@ void VaultCull (unsigned vaultId) { hsRef VaultGetSystemNode () { hsRef result; if (hsRef player = VaultGetPlayerNode()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_System); - if (hsRef systemNode = player->GetChildNode(templateNode, 1)) + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_System); + if (hsRef systemNode = player->GetChildNode(&templateNode, 1)) result = systemNode; } return result; @@ -4688,11 +4662,11 @@ hsRef VaultGetSystemNode () { hsRef VaultGetGlobalInbox () { hsRef result; if (hsRef system = VaultGetSystemNode()) { - hsRef templateNode = new NetVaultNode; - templateNode->SetNodeType(plVault::kNodeType_Folder); - VaultFolderNode folder(templateNode); + NetVaultNode templateNode; + templateNode.SetNodeType(plVault::kNodeType_Folder); + VaultFolderNode folder(&templateNode); folder.SetFolderType(plVault::kGlobalInboxFolder); - if (hsRef inbox = system->GetChildNode(templateNode, 1)) + if (hsRef inbox = system->GetChildNode(&templateNode, 1)) result = inbox; } return result;