blob: 2cf999e8a4a8713a7840cef361faedd65ae41628 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2010, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
// $Id$
package scala.xml
/**
* <p>
* This class acts as a Buffer for nodes. If it is used as a sequence
* of nodes <code>Seq[Node]</code>, it must be ensured that no updates
* occur after that point, because <code>scala.xml.Node</code> is assumed
* to be immutable.
* </p>
* <p>
* Despite this being a sequence, don't use it as key in a hashtable.
* Calling the hashcode function will result in a runtime error.
* </p>
*
* @author Burak Emir
* @version 1.0
*/
class NodeBuffer extends scala.collection.mutable.ArrayBuffer[Node] {
/**
* Append given object to this buffer, returns reference on this NodeBuffer
* for convenience. Some rules apply: If o is null, it is ignored. If it is
* an Iterator or Iterable, its elements will be added. If o is a node, it is
* added as it is. If it is anything else, it gets wrapped in an Atom.
*
* @param o converts to an xml node and adds to this node buffer
* @return this nodebuffer
*/
def &+(o: Any): NodeBuffer = {
o match {
case null | _: Unit | Text("") => // ignore
case it: Iterator[_] => it foreach (this &+ _)
case n: Node => super.+=(n)
case ns: Iterable[_] => this &+ ns.iterator
case d => super.+=(new Atom(d))
}
this
}
}
|