[libgeexml] Rewrite iteration code and rewrite test



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]