From 4e47e36e986af90cb9b601d9077c9cabd2e131a1 Mon Sep 17 00:00:00 2001 From: Nicky Date: Sun, 12 Jun 2016 17:13:05 +0200 Subject: [PATCH] Changes to make GCC happy: - Add template<> to those specialization that missed it - Change template<> template<> to just template<> - Change RlvCommandOptionHelper::parseOption(rlvCmd.getOption()) to RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption ) as otherwise a wrong template go picked wich resulted in linker errors. - Rearrange RlvBehaviourDictionary to be above the classes that need the defintion (RlvBehaviourDictionary::instance call) - Change '(".("RLV_FOLDER_FLAG_NOSTRIP")"' to '(".(" RLV_FOLDER_FLAG_NOSTRIP ")"'. The GCC preprecessor does not like it w/o spaces. --- indra/newview/rlvhandler.cpp | 55 ++++++++++++--------- indra/newview/rlvhelper.h | 95 +++++++++++++++++------------------- indra/newview/rlvinventory.h | 2 +- 3 files changed, 80 insertions(+), 72 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 8fc3b851c2..917356b573 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1165,7 +1165,8 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd) case RLV_BHVR_REMOUTFIT: // @remoutfit[:]=n|y - Checked: 2010-08-29 (RLVa-1.2.1c) | Modified: RLVa-1.2.1c { // If there's an option it should specify a wearable type name (reference count on no option *and* a valid option) - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); VERIFY_OPTION_REF( (rlvCmdOption.isEmpty()) || (rlvCmdOption.isWearableType()) ); // We need to flush any queued force-wear commands before changing the restrictions @@ -1320,6 +1321,7 @@ ERlvCmdRet RlvCommandHandlerBaseImpl::processCommand(const RlvC } // Handles: @bhvr=n|y +template<> ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // There should be no option @@ -1331,6 +1333,7 @@ ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvComma } // Handles: @bhvr:=n|y +template<> ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // There should be an option and it should specify a valid UUID @@ -1348,6 +1351,7 @@ ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const Rlv } // Handles: @bhvr[:]=n|y +template<> ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // If there is an option then it should specify a valid UUID (but don't reference count) @@ -1361,6 +1365,7 @@ ERlvCmdRet RlvBehaviourGenericHandler::onCommand(c } // Handles: @bhvr:=n|y +template<> ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // There should be an option and it should specify a valid modifier (RlvBehaviourModifier performs the appropriate type checks) @@ -1379,6 +1384,7 @@ ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvC } // Handles: @bhvr[:]=n|y +template<> ERlvCmdRet RlvBehaviourGenericHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // If there is an option then it should specify a valid modifier (and reference count) @@ -1400,7 +1406,7 @@ ERlvCmdRet RlvBehaviourGenericHandler::onCommand(co } // Handles: @addattach[:]=n|y and @remattach[:]=n|y -template<> template<> +template<> ERlvCmdRet RlvBehaviourAddRemAttachHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // Sanity check - if there's an option it should specify a valid attachment point name @@ -1433,7 +1439,7 @@ ERlvCmdRet RlvBehaviourAddRemAttachHandler::onCommand(const RlvCommand& rlvCmd, } // Handles: @detach[:]=n|y -template<> template<> +template<> ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // We need to flush any queued force-wear commands before changing the restrictions @@ -1476,7 +1482,8 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlv // Checked: 2010-11-30 (RLVa-1.3.0b) | Added: RLVa-1.3.0b ERlvCmdRet RlvHandler::onAddRemFolderLock(const RlvCommand& rlvCmd, bool& fRefCount) { - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); RlvFolderLocks::folderlock_source_t lockSource; if (rlvCmdOption.isEmpty()) @@ -1521,7 +1528,8 @@ ERlvCmdRet RlvHandler::onAddRemFolderLock(const RlvCommand& rlvCmd, bool& fRefCo ERlvCmdRet RlvHandler::onAddRemFolderLockException(const RlvCommand& rlvCmd, bool& fRefCount) { // Sanity check - the option should specify a shared folder path - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption ); if (!rlvCmdOption.isSharedFolder()) return RLV_RET_FAILED_OPTION; @@ -1545,7 +1553,7 @@ ERlvCmdRet RlvHandler::onAddRemFolderLockException(const RlvCommand& rlvCmd, boo } // Handles: @edit=n|y toggles -template<> template<> +template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { if (fHasBhvr) @@ -1570,7 +1578,7 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBh } // Handles: @sendchannel[:]=n|y -template<> template<> +template<> ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // If there's an option then it should be a valid (= positive and non-zero) chat channel @@ -1593,14 +1601,14 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand } // Handles: @sendim=n|y toggles -template<> template<> +template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { gSavedPerAccountSettings.getControl("DoNotDisturbModeResponse")->setHiddenFromSettingsEditor(fHasBhvr); } // Handles: @edit=n|y toggles -template<> template<> +template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { for (const auto& dbgSetting : RlvExtGetSet::m_DbgAllowed) @@ -1611,7 +1619,7 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour } // Handles: @edit=n|y toggles -template<> template<> +template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { const std::string strEnvFloaters[] = { "env_post_process", "env_settings", "env_delete_preset", "env_edit_sky", "env_edit_water", "env_edit_day_cycle" }; @@ -1641,7 +1649,7 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour e } // Handles: @showhovertext:=n|y -template<> template<> +template<> ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) { // There should be an option and it should specify a valid UUID @@ -1664,7 +1672,7 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvComma } // Handles: @edit=n|y toggles -template<> template<> +template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { if (LLApp::isQuitting()) @@ -1778,7 +1786,8 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const { if (RlvBehaviourInfo::FORCEWEAR_CONTEXT_NONE & rlvCmd.getBehaviourFlags()) { - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); VERIFY_OPTION(rlvCmdOption.isSharedFolder()); eRet = onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags()); } @@ -1802,7 +1811,7 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const } // Handles: @detachme=force -template<> template<> +template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { if (rlvCmd.hasOption()) @@ -1817,13 +1826,14 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCm } // Handles: @remattach[:]=force -template<> template<> +template<> ERlvCmdRet RlvForceRemAttachHandler::onCommand(const RlvCommand& rlvCmd) { if (!isAgentAvatarValid()) return RLV_RET_FAILED; - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); if (rlvCmdOption.isSharedFolder()) return gRlvHandler.onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags()); @@ -1859,10 +1869,11 @@ ERlvCmdRet RlvForceRemAttachHandler::onCommand(const RlvCommand& rlvCmd) } // Handles: @remoutfit[:]=force -template<> template<> +template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { - RlvCommandOptionGeneric rlvCmdOption = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); + RlvCommandOptionGeneric rlvCmdOption; + RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); if (rlvCmdOption.isSharedFolder()) return gRlvHandler.onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags()); @@ -1907,7 +1918,7 @@ void RlvHandler::onForceWearCallback(const uuid_vec_t& idItems, U32 nFlags) cons } // Handles: @setgroup:=force -template<> template<> +template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { if (gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, rlvCmd.getObjectID())) @@ -1938,7 +1949,7 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCm } // Handles: @sit:=force -template<> template<> +template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { LLViewerObject* pObj = NULL; LLUUID idTarget(rlvCmd.getOption()); @@ -1969,7 +1980,7 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) } // Handles: @tpto:[;]=force -template<> template<> +template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { std::vector optionList; @@ -2269,7 +2280,7 @@ ERlvCmdRet RlvHandler::onGetAttachNames(const RlvCommand& rlvCmd, std::string& s } // Handles: @getcommand[:[;[;]]]= -template<> template<> +template<> ERlvCmdRet RlvReplyHandler::onCommand(const RlvCommand& rlvCmd, std::string& strReply) { std::vector optionList; diff --git a/indra/newview/rlvhelper.h b/indra/newview/rlvhelper.h index 50b2850776..6569b4a6ac 100644 --- a/indra/newview/rlvhelper.h +++ b/indra/newview/rlvhelper.h @@ -101,10 +101,10 @@ template<> struct RlvCommandHandlerBaseImpl { static ERlvCmdRet template struct RlvCommandHandler { - template::type> static ERlvCmdRet onCommand(const RlvCommand&, bool&); - template::type> static void onCommandToggle(ERlvBehaviour, bool); - template::type> static ERlvCmdRet onCommand(const RlvCommand&); - template::type> static ERlvCmdRet onCommand(const RlvCommand&, std::string&); + static ERlvCmdRet onCommand(const RlvCommand&, bool&); + static void onCommandToggle(ERlvBehaviour, bool); + static ERlvCmdRet onCommand(const RlvCommand&); + static ERlvCmdRet onCommand(const RlvCommand&, std::string&); }; // Aliases to improve readability in definitions @@ -125,12 +125,10 @@ class RlvCommandProcessor : public RlvBehaviourInfo { public: // Default constructor used by behaviour specializations - template::type> RlvCommandProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, paramType, nBhvrFlags) {} // Constructor used when we don't want to specialize on behaviour (see RlvBehaviourGenericProcessor) - template::type> - RlvCommandProcessor(const std::string& strBhvr, ERlvBehaviour eBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, paramType, nBhvrFlags) {} + RlvCommandProcessor(const std::string& strBhvr, ERlvBehaviour a_eBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, a_eBhvr, paramType, nBhvrFlags) {} ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const override { return baseImpl::processCommand(rlvCmd, &handlerImpl::onCommand); } }; @@ -240,6 +238,47 @@ protected: void onValueChange() const override; }; +// ============================================================================ +// RlvBehaviourDictionary and related classes +// + +class RlvBehaviourDictionary : public LLSingleton +{ + friend class LLSingleton; +protected: + RlvBehaviourDictionary(); + ~RlvBehaviourDictionary(); +public: + void addEntry(const RlvBehaviourInfo* pEntry); + void addModifier(ERlvBehaviour eBhvr, ERlvBehaviourModifier eModifier, RlvBehaviourModifier* pModifierEntry); + + /* + * General helper functions + */ +public: + ERlvBehaviour getBehaviourFromString(const std::string& strBhvr, ERlvParamType eParamType, bool* pfStrict = NULL) const; + const RlvBehaviourInfo* getBehaviourInfo(const std::string& strBhvr, ERlvParamType eParamType, bool* pfStrict = NULL) const; + bool getCommands(const std::string& strMatch, ERlvParamType eParamType, std::list& cmdList) const; + bool getHasStrict(ERlvBehaviour eBhvr) const; + RlvBehaviourModifier* getModifier(ERlvBehaviourModifier eBhvrMod) const { return (eBhvrMod < RLV_MODIFIER_COUNT) ? m_BehaviourModifiers[eBhvrMod] : nullptr; } + RlvBehaviourModifier* getModifierFromBehaviour(ERlvBehaviour eBhvr) const; + void toggleBehaviourFlag(const std::string& strBhvr, ERlvParamType eParamType, RlvBehaviourInfo::EBehaviourFlags eBvhrFlag, bool fEnable); + + /* + * Member variables + */ +protected: + typedef std::list rlv_bhvrinfo_list_t; + typedef std::map, const RlvBehaviourInfo*> rlv_string2info_map_t; + typedef std::multimap rlv_bhvr2info_map_t; + typedef std::map rlv_bhvr2mod_map_t; + + rlv_bhvrinfo_list_t m_BhvrInfoList; + rlv_string2info_map_t m_String2InfoMap; + rlv_bhvr2info_map_t m_Bhvr2InfoMap; + rlv_bhvr2mod_map_t m_Bhvr2ModifierMap; + RlvBehaviourModifier* m_BehaviourModifiers[RLV_MODIFIER_COUNT]; +}; // Inspired by LLControlCache template class RlvBehaviourModifierCache : public LLRefCount, public LLInstanceTracker, ERlvBehaviourModifier> @@ -302,48 +341,6 @@ protected: LLPointer> mCachedModifierPtr; }; -// ============================================================================ -// RlvBehaviourDictionary and related classes -// - -class RlvBehaviourDictionary : public LLSingleton -{ - friend class LLSingleton; -protected: - RlvBehaviourDictionary(); - ~RlvBehaviourDictionary(); -public: - void addEntry(const RlvBehaviourInfo* pEntry); - void addModifier(ERlvBehaviour eBhvr, ERlvBehaviourModifier eModifier, RlvBehaviourModifier* pModifierEntry); - - /* - * General helper functions - */ -public: - ERlvBehaviour getBehaviourFromString(const std::string& strBhvr, ERlvParamType eParamType, bool* pfStrict = NULL) const; - const RlvBehaviourInfo* getBehaviourInfo(const std::string& strBhvr, ERlvParamType eParamType, bool* pfStrict = NULL) const; - bool getCommands(const std::string& strMatch, ERlvParamType eParamType, std::list& cmdList) const; - bool getHasStrict(ERlvBehaviour eBhvr) const; - RlvBehaviourModifier* getModifier(ERlvBehaviourModifier eBhvrMod) const { return (eBhvrMod < RLV_MODIFIER_COUNT) ? m_BehaviourModifiers[eBhvrMod] : nullptr; } - RlvBehaviourModifier* getModifierFromBehaviour(ERlvBehaviour eBhvr) const; - void toggleBehaviourFlag(const std::string& strBhvr, ERlvParamType eParamType, RlvBehaviourInfo::EBehaviourFlags eBvhrFlag, bool fEnable); - - /* - * Member variables - */ -protected: - typedef std::list rlv_bhvrinfo_list_t; - typedef std::map, const RlvBehaviourInfo*> rlv_string2info_map_t; - typedef std::multimap rlv_bhvr2info_map_t; - typedef std::map rlv_bhvr2mod_map_t; - - rlv_bhvrinfo_list_t m_BhvrInfoList; - rlv_string2info_map_t m_String2InfoMap; - rlv_bhvr2info_map_t m_Bhvr2InfoMap; - rlv_bhvr2mod_map_t m_Bhvr2ModifierMap; - RlvBehaviourModifier* m_BehaviourModifiers[RLV_MODIFIER_COUNT]; -}; - // ============================================================================ // RlvCommand // diff --git a/indra/newview/rlvinventory.h b/indra/newview/rlvinventory.h index 5997ad9b24..0fca4dc8b6 100644 --- a/indra/newview/rlvinventory.h +++ b/indra/newview/rlvinventory.h @@ -309,7 +309,7 @@ inline bool RlvInventory::isFoldedFolder(const LLInventoryCategory* pFolder, boo // .() type folder (0 != RlvAttachPtLookup::getAttachPointIndex(pFolder)) // .(nostrip) folder - || ( (pFolder) && (".("RLV_FOLDER_FLAG_NOSTRIP")" == pFolder->getName()) ) + || ( (pFolder) && (".(" RLV_FOLDER_FLAG_NOSTRIP ")" == pFolder->getName()) ) // Composite folder (if composite folders are enabled and we're asked to look for them) #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS || ( (fCheckComposite) && (RlvSettings::getEnableComposites()) &&