]> granicus.if.org Git - clang/commitdiff
remove some slow O(n) methods.
authorChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 18:18:36 +0000 (18:18 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 18:18:36 +0000 (18:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65132 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/RewriteObjC.cpp
include/clang/AST/DeclObjC.h
lib/AST/DeclObjC.cpp

index 0e9eb90da7ba6cf126cb1739e92f33704f8c4f19..f5659d6071e583e525cc66c8596134feb2e5d031 100644 (file)
@@ -2693,7 +2693,7 @@ void RewriteObjC::SynthesizeObjCInternalStruct(ObjCInterfaceDecl *CDecl,
       const char *endHeader = SM->getCharacterData(L);
       endHeader += Lexer::MeasureTokenLength(L, *SM);
 
-      if (!CDecl->getReferencedProtocols().empty()) {
+      if (CDecl->protocol_begin() != CDecl->protocol_end()) {
         // advance to the end of the referenced protocols.
         while (endHeader < cursor && *endHeader != '>') endHeader++;
         endHeader++;
@@ -2869,7 +2869,8 @@ RewriteObjCProtocolsMetaData(const ObjCList<ObjCProtocolDecl> &Protocols,
       continue;
            
     if (PDecl->instmeth_begin() != PDecl->instmeth_end()) {
-      unsigned NumMethods = PDecl->getNumInstanceMethods();
+      unsigned NumMethods = std::distance(PDecl->instmeth_begin(),
+                                          PDecl->instmeth_end());
       /* struct _objc_protocol_method_list {
        int protocol_method_count;
        struct protocol_methods protocols[];
@@ -2902,7 +2903,8 @@ RewriteObjCProtocolsMetaData(const ObjCList<ObjCProtocolDecl> &Protocols,
     }
     
     // Output class methods declared in this protocol.
-    int NumMethods = PDecl->getNumClassMethods();
+    unsigned NumMethods = std::distance(PDecl->classmeth_begin(),
+                                        PDecl->classmeth_end());
     if (NumMethods > 0) {
       /* struct _objc_protocol_method_list {
        int protocol_method_count;
@@ -2973,7 +2975,7 @@ RewriteObjCProtocolsMetaData(const ObjCList<ObjCProtocolDecl> &Protocols,
     }
     else
       Result += "0, ";
-    if (PDecl->getNumClassMethods() > 0) {
+    if (PDecl->classmeth_begin() != PDecl->classmeth_end()) {
       Result += "(struct _objc_protocol_method_list *)&_OBJC_PROTOCOL_CLASS_METHODS_";
       Result += PDecl->getNameAsString();
       Result += "\n";
@@ -3085,7 +3087,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl,
   Result += ClassDecl->getNameAsString();
   Result += "\"\n";
   
-  if (IDecl->getNumInstanceMethods() > 0) {
+  if (IDecl->instmeth_begin() != IDecl->instmeth_end()) {
     Result += "\t, (struct _objc_method_list *)"
            "&_OBJC_CATEGORY_INSTANCE_METHODS_";
     Result += FullCategoryName;
@@ -3093,7 +3095,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl,
   }
   else
     Result += "\t, 0\n";
-  if (IDecl->getNumClassMethods() > 0) {
+  if (IDecl->classmeth_begin() != IDecl->classmeth_end()) {
     Result += "\t, (struct _objc_method_list *)"
            "&_OBJC_CATEGORY_CLASS_METHODS_";
     Result += FullCategoryName;
@@ -3102,7 +3104,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl,
   else
     Result += "\t, 0\n";
   
-  if (CDecl && !CDecl->getReferencedProtocols().empty()) {
+  if (CDecl && CDecl->protocol_begin() != CDecl->protocol_end()) {
     Result += "\t, (struct _objc_protocol_list *)&_OBJC_CATEGORY_PROTOCOLS_"; 
     Result += FullCategoryName;
     Result += "\n";
@@ -3303,7 +3305,7 @@ void RewriteObjC::RewriteObjCClassMetaData(ObjCImplementationDecl *IDecl,
   }
   else
     Result += ", 0\n";
-  if (!CDecl->getReferencedProtocols().empty()) {
+  if (CDecl->protocol_begin() != CDecl->protocol_end()) {
     Result += "\t,0, (struct _objc_protocol_list *)&_OBJC_CLASS_PROTOCOLS_";
     Result += CDecl->getNameAsString();
     Result += ",0,0\n";
@@ -3356,7 +3358,7 @@ void RewriteObjC::RewriteObjCClassMetaData(ObjCImplementationDecl *IDecl,
   }
   else
     Result += ",0,0";
-  if (!CDecl->getReferencedProtocols().empty()) {
+  if (CDecl->protocol_begin() != CDecl->protocol_end()) {
     Result += ", (struct _objc_protocol_list*)&_OBJC_CLASS_PROTOCOLS_";
     Result += CDecl->getNameAsString();
     Result += ", 0,0\n";
index efd5242953d9d00c82a02d762d278b9698465939..346514db505e705182a298e8d030360faeb99165 100644 (file)
@@ -308,11 +308,6 @@ public:
 
   ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const;
 
-  // Get the number of methods, properties. These methods are slow, O(n).
-  unsigned getNumInstanceMethods() const;
-  unsigned getNumClassMethods() const;
-  unsigned getNumProperties() const;
-  
   // Marks the end of the container.
   SourceLocation getAtEndLoc() const { return AtEndLoc; }
   void setAtEndLoc(SourceLocation L) { AtEndLoc = L; }
@@ -798,9 +793,6 @@ public:
   const ObjCInterfaceDecl *getClassInterface() const { return ClassInterface; }
   ObjCInterfaceDecl *getClassInterface() { return ClassInterface; }
   
-  unsigned getNumInstanceMethods() const { return InstanceMethods.size(); }
-  unsigned getNumClassMethods() const { return ClassMethods.size(); }
-
   void addInstanceMethod(ObjCMethodDecl *method) {
     InstanceMethods.push_back(method);
   }
index 2ae7ccc8165139ed7d950fb0be0fad566f501a87..d0b8a9731a3c402a720e2be12c9e76596074ee3c 100644 (file)
@@ -282,25 +282,6 @@ ObjCMethodDecl *ObjCContainerDecl::getClassMethod(Selector Sel) const {
   return 0;
 }
 
-unsigned ObjCContainerDecl::getNumInstanceMethods() const {
-  unsigned sum = 0;
-  for (instmeth_iterator I=instmeth_begin(), E=instmeth_end(); I != E; ++I)
-    sum++;
-  return sum;
-}
-unsigned ObjCContainerDecl::getNumClassMethods() const { 
-  unsigned sum = 0;
-  for (classmeth_iterator I=classmeth_begin(), E=classmeth_end(); I != E; ++I)
-    sum++;
-  return sum;
-}
-unsigned ObjCContainerDecl::getNumProperties() const { 
-  unsigned sum = 0;
-  for (prop_iterator I=prop_begin(), E=prop_end(); I != E; ++I)
-    sum++;
-  return sum;
-}
-
 /// FindPropertyDeclaration - Finds declaration of the property given its name
 /// in 'PropertyId' and returns it. It returns 0, if not found.
 /// FIXME: Convert to DeclContext lookup...