Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


At 9:33am -0400 Mon, 03 Oct 2011, Tor Lillqvist wrote:
  stoc/source/inspect/introspection.cxx |    9 ++++++++-
  1 file changed, 8 insertions(+), 1 deletion(-)

New commits:
commit 9e6d06a871b366cc72f9a23ab45080b66a47f144

Making my way through a backlog of commits ... it seems to me that it doesn't matter why the for-loop was used in the first place, because now it's not "clean" code, and the function could be made "that much better".

I don't know much about the Reference or XIdlClass data types, but this patch at least compiles on my machine, and I claim removes ambiguity while remaining true to the "came-before" logic. It also removes the overhead of recursion, as I don't think this algorithm needs it.

Cheers,

Kevin
From def7c27b499e0c39ff4ad12637422fd8782b220a Mon Sep 17 00:00:00 2001
From: Kevin Hunter <hunteke@earlham.edu>
Date: Tue, 4 Oct 2011 12:51:10 -0400
Subject: [PATCH] Cleanup isDerivedFrom function

I don't know why it was written previously with a for-loop; my hunch is
that it was originally a mix of thoughts between a recursive and
non-recursive approach.  Either way, this could be simplified, so here
is a non-recursive approach.  (Why create stack overhead when another
algorithm would suffice?)

This solution also reduces the stack size of the function itself, and
reduces a variable scope.
---
 stoc/source/inspect/introspection.cxx |   30 ++++++++----------------------
 1 files changed, 8 insertions(+), 22 deletions(-)

diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx
index 36f1acc..831802b 100644
--- a/stoc/source/inspect/introspection.cxx
+++ b/stoc/source/inspect/introspection.cxx
@@ -109,30 +109,16 @@ typedef WeakImplHelper3< XIntrospectionAccess, XMaterialHolder, XExactName > 
Int
 sal_Bool isDerivedFrom( Reference<XIdlClass> xToTestClass, Reference<XIdlClass> xDerivedFromClass )
 {
     Sequence< Reference<XIdlClass> > aClassesSeq = xToTestClass->getSuperclasses();
-    const Reference<XIdlClass>* pClassesArray = aClassesSeq.getConstArray();
-    sal_Int32 nSuperClassCount = aClassesSeq.getLength();
-    sal_Int32 i;
-    for( i = 0 ;
-         i < nSuperClassCount ;
-         /* No "increment" expression needed as the body always
-          * returns, and in fact MSVC warns about unreachable code if
-          * we include one. On the other hand, what's the point in
-          * using a for loop here then if all we ever will look at is
-          * pClassesArray[0] ?
-          */ )
-    {
-        const Reference<XIdlClass>& rxClass = pClassesArray[i];
-        if( xDerivedFromClass->equals( rxClass ) )
-        {
-            // Treffer
+
+    while ( aClassesSeq.getLength() ) {
+        const Reference<XIdlClass>& rxClass = aClassesSeq.getConstArray()[0];
+
+        if ( xDerivedFromClass->equals( rxClass ) )
             return sal_True;
-        }
-        else
-        {
-            // Rekursiv weitersuchen
-            return isDerivedFrom( rxClass, xDerivedFromClass );
-        }
+
+        aClassesSeq = rxClass->getSuperclasses();
     }
+
     return sal_False;
 }
 
-- 
1.7.1


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.