summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-05-26 10:41:44 +0000
committerburaq <buraq@epfl.ch>2004-05-26 10:41:44 +0000
commite0cb1d2184ca7f7504970c42ac17c1e255727b72 (patch)
tree28236ca3334032fd74231a9280905586df931457
parentf69855773715984ebf757ff8e5cbcfeea87911c0 (diff)
downloadscala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.tar.gz
scala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.tar.bz2
scala-e0cb1d2184ca7f7504970c42ac17c1e255727b72.zip
attribute maps
-rw-r--r--sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml55
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) =&gt; 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 &lt;- attribute.elements ) { newmap += p._1 -&gt; p._2 };
- for( val p &lt;- attrs ) { newmap += p._1 -&gt; p._2 };
- new &ccElementName;( child:_* ) {
- private val hmap = newmap;
- override def attribute = newmap.toList;
+ var newmap = new immutable.TreeMap[String,String]();
+ for( val p &lt;- attribute.elements ) {
+ newmap = newmap.update( p._1, p._2 )
}
+ for( val p &lt;- 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 &lt;- attribute.elements ) { newmap += p._1 -&gt; p._2 };
- newmap += attr._1 -&gt; attr._2;
- new &ccElementName;( child:_* ) {
- private val hmap = newmap;
- override def attribute = newmap.toList;
- }
+ var newmap = new immutable.TreeMap[String,String]();
+ for( val p &lt;- 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;