diff options
author | buraq <buraq@epfl.ch> | 2004-05-26 10:41:44 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2004-05-26 10:41:44 +0000 |
commit | e0cb1d2184ca7f7504970c42ac17c1e255727b72 (patch) | |
tree | 28236ca3334032fd74231a9280905586df931457 | |
parent | f69855773715984ebf757ff8e5cbcfeea87911c0 (diff) | |
download | scala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.tar.gz scala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.tar.bz2 scala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.zip |
attribute maps
-rw-r--r-- | sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml b/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml index ee404c651c..a1f05a9050 100644 --- a/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml +++ b/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml @@ -23,18 +23,18 @@ object <string ref="objectName"/> { - import scala.collection.mutable.HashMap; + import scala.collection.Map; + import scala.collection.immutable; + import scala.collection.mutable; - type childrenT = scala.Seq[scala.xml.Node]; - type attribMap = scala.collection.immutable.Map[String,String]; - type attribMapT = HashMap[String,String]; - type NodeConstructorType = (childrenT,attribMapT) => scala.xml.Node; - <elementBinding> - def constr_&ccElementName;( ch:childrenT, attrs:attribMapT ) = new &ccElementName;(ch:_*) { - private val hmap = attrs; - override def attribute = attrs.toList; + type cT = scala.Seq[scala.xml.Node]; + type aT = Map[String,String]; + <elementBinding> + def constr_&ccElementName;( ch:cT, attrs:aT ) = new &ccElementName;(ch:_*) { + override var hmap = attrs; + override val attribHashCode = attrs.toList.hashCode() ; }; case class &ccElementName;( ch:scala.xml.Node* ) extends scala.xml.Node { @@ -42,8 +42,9 @@ def label = &qElementName;; def child = ch; - private val hmap = new HashMap[String,String]; - override def attribute:Seq[Pair[String,String]] = Nil; + protected var hmap:aT = new immutable.TreeMap[String,String](); + final def attribute:aT = hmap; + <attributeBinding> def &cAttributeName; : scala.Option[String] = hmap.get(&qAttributeName;); </attributeBinding> @@ -51,24 +52,24 @@ /** returns a new &ccElementName; with updated attributes */ final def %(attrs: Seq[Pair[String, String]]) = { - val newmap = new HashMap[String,String](); - for( val p <- attribute.elements ) { newmap += p._1 -> p._2 }; - for( val p <- attrs ) { newmap += p._1 -> p._2 }; - new &ccElementName;( child:_* ) { - private val hmap = newmap; - override def attribute = newmap.toList; + var newmap = new immutable.TreeMap[String,String](); + for( val p <- attribute.elements ) { + newmap = newmap.update( p._1, p._2 ) } + for( val p <- attrs ) { + newmap = newmap.update( p._1, p._2 ) + } + constr_&ccElementName;( child, newmap ) ; } /** returns a new &ccElementName; with updated attribute */ final def %(attr: Pair[String, String]) = { - val newmap = new HashMap[String,String](); - for( val p <- attribute.elements ) { newmap += p._1 -> p._2 }; - newmap += attr._1 -> attr._2; - new &ccElementName;( child:_* ) { - private val hmap = newmap; - override def attribute = newmap.toList; - } + var newmap = new immutable.TreeMap[String,String](); + for( val p <- attribute.elements ) { + newmap = newmap.update( p._1, p._2 ); + }; + newmap = newmap.update( attr._1, attr._2 ); + constr_&ccElementName;( child, newmap ) ; } } </elementBinding> @@ -79,14 +80,14 @@ def load( filename:String, _compress:boolean ):scala.xml.Node = { val fAdapter = new scala.xml.BindingFactoryAdapter { val f = { - val res = new scala.collection.mutable.HashMap[String, NodeConstructorType] ; + val res = new mutable.HashMap[String, (cT,aT) => scala.xml.Node]() ; <elementBinding> - res.update( &qElementName;, (x:childrenT,aMap:attribMapT) => constr_&ccElementName;(x,aMap));</elementBinding> + res.update( &qElementName;, (x:cT,aMap:aT) => constr_&ccElementName;(x,aMap));</elementBinding> res; } val g = { - val res = new scala.collection.mutable.HashMap[String, boolean] ; + val res = new mutable.HashMap[String, boolean]() ; <elementBinding> res.update( &qElementName;, <string ref="elementContainsText"/>);</elementBinding> res; |