[libgeexml] Rewrite iteration code and rewrite test
- From: Roberto Majadas <telemaco src gnome org>
- To: svn-commits-list gnome org
- Subject: [libgeexml] Rewrite iteration code and rewrite test
- Date: Tue, 7 Jul 2009 16:35:50 +0000 (UTC)
commit f46928c5d8282824eb85f915abf7eb201330e6f3
Author: Roberto Majadas <roberto majadas openshine com>
Date: Tue Jul 7 18:34:57 2009 +0200
Rewrite iteration code and rewrite test
geexml/ElementTree.vala | 45 +++++++++++++++++++++++++++------------------
test/test-xmlreader.vala | 44 +++++++++++++++++++++++++++++++-------------
test/test1.xml | 1 +
3 files changed, 59 insertions(+), 31 deletions(-)
---
diff --git a/geexml/ElementTree.vala b/geexml/ElementTree.vala
index 4bf8c59..0d9c631 100644
--- a/geexml/ElementTree.vala
+++ b/geexml/ElementTree.vala
@@ -271,33 +271,42 @@ namespace Gee.XmlEtree {
private class Iterator<T> : Gee.Iterator<T>,
Gee.CollectionObject<T> {
- private Element etree { get; set; }
- private bool first_iter ;
+ private Element _iter ;
+ private Element iter {
+ get { return this._iter ; }
+ set {
+ if ( this._iter == null ) {
+ this._iter = new Element (null) ;
+ this._iter.node = value.node->children ;
+ }
+ else {
+ this._iter = value ;
+ }
+ }
+ }
- public Iterator( Element _etree ) {
- this.first_iter = true ;
- etree = new Element( null );
- etree.node = _etree.node->children ;
+ public Iterator( Element e ) {
+ this.iter = e ;
}
public bool next( ) {
- if ( etree.next_node == null ) {
- return false;
- }else{
- return true;
+ if ( this.iter.node == null ) {
+ return false ;
+ } else {
+ return true ;
}
}
public T? get( ) {
- if ( this.first_iter != true ) {
- var new_etree = new Element( null );
- new_etree.node = etree.next_node ;
- etree = new_etree ;
- } else {
- this.first_iter = false ;
+ var ret = this.iter ;
+ var next = new Element ( null ) ;
+
+ if (this.iter.next_node != null) {
+ next.node = this.iter.next_node ;
}
-
- return etree ;
+
+ this.iter = next ;
+ return ret ;
}
}
diff --git a/test/test-xmlreader.vala b/test/test-xmlreader.vala
index 6a04eaf..b8f506f 100644
--- a/test/test-xmlreader.vala
+++ b/test/test-xmlreader.vala
@@ -11,22 +11,40 @@ public class BasicSample : Object {
}catch( Gee.XmlEtree.Error e ){
stderr.printf( "Oops: %s\n", e.message );
}
-
-
- // Iterating xml elements
- // --------------------------------
-
+
+ this.print_elements( etree , 0 );
+ }
+
+ private void print_elements( Element etree , int level ){
foreach( Element e in etree ) {
- stdout.printf( "<%s>\n" , e.tag );
- foreach( string key in e.attribs.get_keys( ) ) {
- stdout.printf( " |-> '%s' : '%s'\n", key, e.attribs[key] ) ;
- }
- if ( e.tag != "note" )
- stdout.printf( " \\-> text : '%s'\n", e.text );
+ stdout.printf ("%s %s : '%s' attrs=[%s] \n", this.make_arrows(level), e.tag,
+ e.text, this.print_attrs(e)) ;
+ this.print_elements( e, level + 1);
+ }
+ }
+
+ private string print_attrs( Element e ) {
+ string s = "" ;
+
+ foreach( string key in e.attribs.get_keys( ) ) {
+ s = s + "'%s' : '%s', ".printf (key, e.attribs[key]) ;
}
-
+
+ return s ;
}
-
+
+ private string make_arrows (int level){
+ string s = "";
+ int i ;
+
+ for ( i = 0 ; i<level ; i++ ){
+ s = s + "--" ;
+ }
+ s = s + ">" ;
+ return s ;
+ }
+
+
public static int main( string[] args ) {
var sample = new BasicSample( );
diff --git a/test/test1.xml b/test/test1.xml
index 256fae0..c5d1db5 100644
--- a/test/test1.xml
+++ b/test/test1.xml
@@ -4,4 +4,5 @@
<from city="New York">John</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
+ <attachments><file>note.txt</file></attachments>
</note>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]