This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 20fce22935 Made XML descendents more efficient
20fce22935 is described below

commit 20fce229356f8d0bb66038fd6e1d8394efe85578
Author: Harbs <[email protected]>
AuthorDate: Sun Jun 9 22:19:24 2024 +0300

    Made XML descendents more efficient
---
 frameworks/projects/XML/src/main/royale/XML.as     | 46 +++++++++++++---------
 frameworks/projects/XML/src/main/royale/XMLList.as | 39 ++++++++++--------
 2 files changed, 50 insertions(+), 35 deletions(-)

diff --git a/frameworks/projects/XML/src/main/royale/XML.as 
b/frameworks/projects/XML/src/main/royale/XML.as
index 8262e9e48d..500e53203c 100644
--- a/frameworks/projects/XML/src/main/royale/XML.as
+++ b/frameworks/projects/XML/src/main/royale/XML.as
@@ -1396,29 +1396,37 @@ package
                        var len:int;
                        if(!name)
                                name = "*";
-                       name = toXMLName(name);
-                       var list:XMLList = new XMLList();
-                       if(name.isAttribute)
+                       var descendents:Array = 
getDescendentArray(this,toXMLName(name),[]);
+                       COMPILE::SWF{
+                               return null;
+                       }
+                       COMPILE::JS{
+                               return XMLList.fromArray(descendents);
+                       }
+               }
+               private function 
getDescendentArray(current:XML,name:QName,arr:Array):Array
+               {
+                       if(name.isAttribute && current._attributes)
                        {
-                               len = attributeLength();
-                               for(i=0;i<len;i++)
+                               for each(var attr:XML in current._attributes)
                                {
-                                       if(name.matches(_attributes[i].name()))
-                                               list.append(_attributes[i]);
+                                       if(name.matches(attr.name()))
+                                               arr.push(attr);
                                }
                        }
-                       len = childrenLength();
-                       for(i=0;i<len;i++)
+                       if(current._children)
                        {
-                               var child:XML = _children[i] as XML;
-                               if(name.matches(child.name()))
-                                       list.append(child);
-                               if(child.getNodeRef() == ELEMENT)
+                               for each(var child:XML in current._children)
                                {
-                                       list.concat(child.descendants(name));
+                                       if(name.matches(child.name()))
+                                               arr.push(child);
+                                       if(child.getNodeRef() == ELEMENT)
+                                       {
+                                               
getDescendentArray(child,name,arr);
+                                       }
                                }
                        }
-                       return list;
+                       return arr;
                }
                
                /**
@@ -3212,11 +3220,11 @@ package
                        var str:String = name.toString();
                        if(parseInt(str,10).toString() == name)
                                throw new TypeError("invalid element name");
-                       
-                       if(str.indexOf("@") == 0)
-                               return toAttributeName(name);
+                       var qname:QName = new QName(str);
+                       if(str.charCodeAt(0) == 64)// "@"
+                               qname.setIsAttribute(true);
 
-                       return new QName(str);
+                       return qname;
                }
                
                /**
diff --git a/frameworks/projects/XML/src/main/royale/XMLList.as 
b/frameworks/projects/XML/src/main/royale/XMLList.as
index c12363e056..44d4a61f2b 100644
--- a/frameworks/projects/XML/src/main/royale/XMLList.as
+++ b/frameworks/projects/XML/src/main/royale/XMLList.as
@@ -74,6 +74,16 @@ package
                        return list !== null ? String(list) : null;
                }
                
+               public static function fromArray(arr:Array):XMLList
+               {
+                       var list:XMLList = new XMLList();
+                       var len:int = arr.length;
+                       while(counter < len)
+                               list.addIndex(counter+1);
+
+                       list._xmlArray = arr;
+                       return list;
+               }
                public function XMLList(expression:Object = null)
                {
                        addIndex(0);
@@ -328,23 +338,20 @@ package
                {
                        _xmlArray[_xmlArray.length] = child;
                        addIndex(_xmlArray.length);
-                       do//while false
+                       if(!_targetObject)
+                               return;
+                       if(!_targetProperty)
                        {
-                               if(!_targetObject)
-                                       break;
-                               if(!_targetProperty)
-                               {
-                                       _targetObject.appendChild(child);
-                                       break;
-                               }
-                               var objToAppend:XMLList = 
_targetObject.child(_targetProperty);
-                               if(!objToAppend.length())
-                               {
-                                       _targetObject.appendChild(child);
-                                       break;
-                               }
-                               
_targetObject.insertChildAfter(objToAppend[objToAppend.length()-1],child);
-                       }while(false);
+                               _targetObject.appendChild(child);
+                               return;
+                       }
+                       var objToAppend:XMLList = 
_targetObject.child(_targetProperty);
+                       if(!objToAppend.length())
+                       {
+                               _targetObject.appendChild(child);
+                               return;
+                       }
+                       
_targetObject.insertChildAfter(objToAppend[objToAppend.length()-1],child);
                }
 
                public function appendChild(child:*):XML

Reply via email to