From 4e8eccdd05cae12f99c02e28210717a978e51e53 Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Thu, 25 Mar 1999 07:30:47 +0000 Subject: [PATCH] Added GetMethodInfoForName git-svn-id: svn://10.0.0.236/trunk@25095 18797224-902f-48f8-a5cc-f745e15eee43 --- .../libxpt/xptinfo/public/nsIInterfaceInfo.h | 2 ++ .../libxpt/xptinfo/src/nsInterfaceInfo.cpp | 30 +++++++++++++++++++ .../libxpt/xptinfo/src/nsInterfaceInfo.h | 2 ++ .../reflect/xptinfo/public/nsIInterfaceInfo.h | 2 ++ .../reflect/xptinfo/src/nsInterfaceInfo.cpp | 30 +++++++++++++++++++ .../reflect/xptinfo/src/nsInterfaceInfo.h | 2 ++ 6 files changed, 68 insertions(+) diff --git a/mozilla/xpcom/libxpt/xptinfo/public/nsIInterfaceInfo.h b/mozilla/xpcom/libxpt/xptinfo/public/nsIInterfaceInfo.h index 686e4285281..c545cadc4fd 100644 --- a/mozilla/xpcom/libxpt/xptinfo/public/nsIInterfaceInfo.h +++ b/mozilla/xpcom/libxpt/xptinfo/public/nsIInterfaceInfo.h @@ -50,6 +50,8 @@ public: // These include methods and constants of parents. // There do *not* make copies ***explicit bending of XPCOM rules*** NS_IMETHOD GetMethodInfo(uint16 index, const nsXPTMethodInfo** info) = 0; + NS_IMETHOD GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** info) = 0; NS_IMETHOD GetConstant(uint16 index, const nsXPTConstant** constant) = 0; // Get the interface information or iid associated with a param of some diff --git a/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.cpp b/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.cpp index d7e8c55c044..203a665aa28 100644 --- a/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.cpp +++ b/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.cpp @@ -127,6 +127,36 @@ nsInterfaceInfo::GetMethodInfo(uint16 index, const nsXPTMethodInfo** info) return NS_OK; } +NS_IMETHODIMP +nsInterfaceInfo::GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** result) +{ + // XXX probably want to speed this up with a hashtable, or by at least interning + // the names to avoid the strcmp + nsresult rv; + for (uint16 i = mMethodBaseIndex; i < mMethodCount; i++) { + const nsXPTMethodInfo* info; + info = NS_REINTERPRET_CAST(nsXPTMethodInfo*, + &mInterfaceRecord->interfaceDescriptor-> + method_descriptors[i - mMethodBaseIndex]); + if (PL_strcmp(methodName, info->name) == 0) { +#ifdef NS_DEBUG + // make sure there aren't duplicate names + for (; i < mMethodCount; i++) { + const nsXPTMethodInfo* info2; + info2 = NS_REINTERPRET_CAST(nsXPTMethodInfo*, + &mInterfaceRecord->interfaceDescriptor-> + method_descriptors[i - mMethodBaseIndex]); + NS_ASSERTION(PL_strcmp(methodName, info2->name)!= 0, "duplicate names"); + } +#endif + *result = info; + return NS_OK; + } + } + return NS_ERROR_INVALID_ARG; +} + NS_IMETHODIMP nsInterfaceInfo::GetConstant(uint16 index, const nsXPTConstant** constant) { diff --git a/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.h b/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.h index 1fa45fe4a40..b3f57537a37 100644 --- a/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.h +++ b/mozilla/xpcom/libxpt/xptinfo/src/nsInterfaceInfo.h @@ -48,6 +48,8 @@ class nsInterfaceInfo : public nsIInterfaceInfo // These include methods and constants of parents. // There do *not* make copies ***explicit bending of XPCOM rules*** NS_IMETHOD GetMethodInfo(uint16 index, const nsXPTMethodInfo** info); + NS_IMETHOD GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** info); NS_IMETHOD GetConstant(uint16 index, const nsXPTConstant** constant); // Get the interface information or iid associated with a param of some diff --git a/mozilla/xpcom/reflect/xptinfo/public/nsIInterfaceInfo.h b/mozilla/xpcom/reflect/xptinfo/public/nsIInterfaceInfo.h index 686e4285281..c545cadc4fd 100644 --- a/mozilla/xpcom/reflect/xptinfo/public/nsIInterfaceInfo.h +++ b/mozilla/xpcom/reflect/xptinfo/public/nsIInterfaceInfo.h @@ -50,6 +50,8 @@ public: // These include methods and constants of parents. // There do *not* make copies ***explicit bending of XPCOM rules*** NS_IMETHOD GetMethodInfo(uint16 index, const nsXPTMethodInfo** info) = 0; + NS_IMETHOD GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** info) = 0; NS_IMETHOD GetConstant(uint16 index, const nsXPTConstant** constant) = 0; // Get the interface information or iid associated with a param of some diff --git a/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.cpp b/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.cpp index d7e8c55c044..203a665aa28 100644 --- a/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.cpp +++ b/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.cpp @@ -127,6 +127,36 @@ nsInterfaceInfo::GetMethodInfo(uint16 index, const nsXPTMethodInfo** info) return NS_OK; } +NS_IMETHODIMP +nsInterfaceInfo::GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** result) +{ + // XXX probably want to speed this up with a hashtable, or by at least interning + // the names to avoid the strcmp + nsresult rv; + for (uint16 i = mMethodBaseIndex; i < mMethodCount; i++) { + const nsXPTMethodInfo* info; + info = NS_REINTERPRET_CAST(nsXPTMethodInfo*, + &mInterfaceRecord->interfaceDescriptor-> + method_descriptors[i - mMethodBaseIndex]); + if (PL_strcmp(methodName, info->name) == 0) { +#ifdef NS_DEBUG + // make sure there aren't duplicate names + for (; i < mMethodCount; i++) { + const nsXPTMethodInfo* info2; + info2 = NS_REINTERPRET_CAST(nsXPTMethodInfo*, + &mInterfaceRecord->interfaceDescriptor-> + method_descriptors[i - mMethodBaseIndex]); + NS_ASSERTION(PL_strcmp(methodName, info2->name)!= 0, "duplicate names"); + } +#endif + *result = info; + return NS_OK; + } + } + return NS_ERROR_INVALID_ARG; +} + NS_IMETHODIMP nsInterfaceInfo::GetConstant(uint16 index, const nsXPTConstant** constant) { diff --git a/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.h b/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.h index 1fa45fe4a40..b3f57537a37 100644 --- a/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.h +++ b/mozilla/xpcom/reflect/xptinfo/src/nsInterfaceInfo.h @@ -48,6 +48,8 @@ class nsInterfaceInfo : public nsIInterfaceInfo // These include methods and constants of parents. // There do *not* make copies ***explicit bending of XPCOM rules*** NS_IMETHOD GetMethodInfo(uint16 index, const nsXPTMethodInfo** info); + NS_IMETHOD GetMethodInfoForName(const char* methodName, uint16 *index, + const nsXPTMethodInfo** info); NS_IMETHOD GetConstant(uint16 index, const nsXPTConstant** constant); // Get the interface information or iid associated with a param of some