diff options
author | buraq <buraq@epfl.ch> | 2003-12-03 12:22:33 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-12-03 12:22:33 +0000 |
commit | dec4538a461d1cc7fb493571466d6c2f2df431e3 (patch) | |
tree | 455b0b5ccebe2319fb07c76bb89ff9ac1dfce5e9 | |
parent | 5488f9b4ae78cda29ad0cd3fdbf7ac3561323edf (diff) | |
download | scala-dec4538a461d1cc7fb493571466d6c2f2df431e3.tar.gz scala-dec4538a461d1cc7fb493571466d6c2f2df431e3.tar.bz2 scala-dec4538a461d1cc7fb493571466d6c2f2df431e3.zip |
erroneous hash-consing fixed
-rw-r--r-- | sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala index afd0941bff..54c9ea5dcc 100644 --- a/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala +++ b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala @@ -9,33 +9,32 @@ import scala.xml.{Node,Text,FactoryAdapter} ; */ class NoBindingFactoryAdapter extends FactoryAdapter { - def nodeContainsText( label:java.lang.String ):boolean = true; - - /* default behaviour is hash-consing */ - val cache = new HashMap[Element,Element]; - - def createNode( label: String, - attrs: HashMap[String,String], - children: List[Node] ):Element = { - - val el = new Element( label, children ) { - override def attributes = attrs; - }; - - cache.get( el ).match{ - case Some(cachedElem) => - //System.err.println("[using cached elem +"+cachedElem.toXML+"!]"); - cachedElem - case None => - cache.update( el, el ); - el - } - } + def nodeContainsText( label:java.lang.String ):boolean = true; + + /* default behaviour is hash-consing */ + val cache = new HashMap[int,Element](); - def createText( text:String ) = Text( text ); + def createNode( label: String, attrs: HashMap[String,String], children: List[Node] ):Element = { - override def loadXML( url:URL ):Element = loadXML( url.getFile() ); + val elHashCode = Utility.hashCode( label, attrs, children ) ; - override def loadXML( filename:String ):Element = - super.loadXML( filename ).asInstanceOf[ Element ] + cache.get( elHashCode ).match{ + case Some(cachedElem) => + //System.err.println("[using cached elem +"+cachedElem.toXML+"!]"); + cachedElem + case None => + val el = new Element( label, children ) { + override def attributes = attrs; + }; + cache.update( elHashCode, el ); + el + } } + + def createText( text:String ) = Text( text ); + + override def loadXML( url:URL ):Element = loadXML( url.getFile() ); + + override def loadXML( filename:String ):Element = + super.loadXML( filename ).asInstanceOf[ Element ] +} |