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