You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by vg...@apache.org on 2007/03/15 21:53:02 UTC
svn commit: r518751 - in /xml/xindice/trunk/java:
src/org/apache/xindice/xml/ src/org/apache/xindice/xml/dom/
tests/src/org/apache/xindice/xml/dom/
Author: vgritsenko
Date: Thu Mar 15 13:53:00 2007
New Revision: 518751
URL: http://svn.apache.org/viewvc?view=rev&rev=518751
Log:
refactor signatures to reduce bit arithmetics
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/xml/Signatures.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/TextWriter.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedInput.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedOutput.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java
xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityReferenceImpl.java
xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/Signatures.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/Signatures.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/Signatures.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/Signatures.java Thu Mar 15 13:53:00 2007
@@ -26,41 +26,49 @@
* @version $Revision$, $Date$
*/
public interface Signatures {
- static final int Unknown = -1;
- static final int False = 0x0;
- static final int True = 0x1;
+ /*
+ * Signature byte consists of following fields:
+ * Node type 0xC0
+ * Text node type 0x20 (in text node)
+ * Element bits 0x30 (in elem node)
+ * Declaration type 0x3C (in decl node)
+ */
+
+ byte NODE_TEXT = 0x00;
+ byte NODE_ELEM = 0x40;
+ byte NODE_PROC = (byte) 0x80;
+ byte NODE_DECL = (byte) 0xC0;
+
+ byte TEXT_TEXT = 0x00;
+ byte TEXT_ENTITY = 0x20;
+
+ byte ELEM_ATTRS = 0x20;
+ byte ELEM_CHILDREN = 0x10;
+
+ byte DECL_ELEMENT = 0x04;
+ byte DECL_ATTLIST = 0x08;
+ byte DECL_CDATA = 0x10;
+ byte DECL_REPLACED = 0x14;
+ byte DECL_ENTITY = 0x18;
+ byte DECL_COMMENT = 0x20;
+ byte DECL_DOCTYPE = 0x28;
+ byte DECL_NOTATION = 0x30;
+ byte DECL_IGNORE = 0x38;
+ byte DECL_INCLUDE = 0x3C;
+
+ byte SIZE_NONE = 0x00;
+ byte SIZE_INT = 0x01;
+ byte SIZE_SHORT = 0x02;
+ byte SIZE_BYTE = 0x03;
+
+ int ENT_DEFINED = 0x01; // Symbol_ID attached
+ int ENT_AMP = 0x02; // &
+ int ENT_LT = 0x03; // <
+ int ENT_GT = 0x04; // >
+ int ENT_QUOT = 0x05; // "
+ int ENT_APOS = 0x06; // '
+ int ENT_UNICODE = 0x1F; // &#x...;
- static final int NoContent = 0x0;
- static final int IntContent = 0x1;
- static final int ShortContent = 0x2;
- static final int ByteContent = 0x3;
-
- static final int Char = 0x0;
- static final int Elem = 0x1;
- static final int Proc = 0x2;
- static final int Decl = 0x3;
-
- static final int CharText = 0x0;
- static final int CharEntity = 0x1;
-
- static final int EntUnknown = 0x0; // This should not happen
- static final int EntDefined = 0x1; // Symbol_ID attached
- static final int EntAmp = 0x2; // &
- static final int EntLt = 0x3; // <
- static final int EntGt = 0x4; // >
- static final int EntQuot = 0x5; // "
- static final int EntApos = 0x6; // '
- static final int EntUnicode = 0x1F; // &#x...;
-
- static final int DeclElement = 0x1;
- static final int DeclAttList = 0x2;
- static final int DeclCData = 0x4;
- static final int DeclReplaced = 0x5;
- static final int DeclEntity = 0x6;
- static final int DeclComment = 0x8;
- static final int DeclDocType = 0xA;
- static final int DeclNotation = 0xC;
- static final int DeclIgnore = 0xE;
- static final int DeclInclude = 0xF;
+ int Unknown = -1;
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/TextWriter.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/TextWriter.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/TextWriter.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/TextWriter.java Thu Mar 15 13:53:00 2007
@@ -97,6 +97,7 @@
break;
case Node.DOCUMENT_TYPE_NODE:
+ // TODO Implement
if (log.isErrorEnabled()) {
log.error("can't serialize doctype yet");
}
@@ -143,18 +144,21 @@
break;
case Node.ENTITY_REFERENCE_NODE:
+ // TODO Implement
if (log.isErrorEnabled()) {
log.error("can't serialize reference ref yet");
}
break;
case Node.ENTITY_NODE:
+ // TODO Implement
if (log.isErrorEnabled()) {
log.error("can't serialize entity yet");
}
break;
case Node.NOTATION_NODE:
+ // TODO Implement
if (log.isErrorEnabled()) {
log.error("can't serialize notation yet");
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedInput.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedInput.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedInput.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedInput.java Thu Mar 15 13:53:00 2007
@@ -73,46 +73,45 @@
* @return The DOM Node type
*/
public final short getNodeType() {
- byte type = (byte) ((signature & 0xC0) >>> 0x6);
+ byte type = (byte) (signature & 0xC0);
switch (type) {
- case Signatures.Char:
- type = (byte) ((signature & 0x20) >>> 0x5);
- if (type == Signatures.CharText) {
+ case Signatures.NODE_TEXT:
+ type = (byte) (signature & 0x20);
+ if (type == Signatures.TEXT_TEXT) {
return Node.TEXT_NODE;
} else {
return Node.ENTITY_REFERENCE_NODE;
}
- case Signatures.Elem:
+ case Signatures.NODE_ELEM:
return Node.ELEMENT_NODE;
- case Signatures.Proc:
+ case Signatures.NODE_PROC:
return Node.PROCESSING_INSTRUCTION_NODE;
- case Signatures.Decl:
- type = (byte) ((signature & 0x3C) >>> 0x2);
- switch (type) {
+ case Signatures.NODE_DECL:
+ switch ((byte) (signature & 0x3C)) {
- case Signatures.DeclCData:
+ case Signatures.DECL_CDATA:
return Node.CDATA_SECTION_NODE;
- case Signatures.DeclEntity:
+ case Signatures.DECL_ENTITY:
return Node.ENTITY_NODE;
- case Signatures.DeclComment:
+ case Signatures.DECL_COMMENT:
return Node.COMMENT_NODE;
- case Signatures.DeclDocType:
+ case Signatures.DECL_DOCTYPE:
return Node.DOCUMENT_TYPE_NODE;
- case Signatures.DeclNotation:
+ case Signatures.DECL_NOTATION:
return Node.NOTATION_NODE;
default:
return Signatures.Unknown;
-
}
+
default:
if (log.isWarnEnabled()) {
log.warn("invalid signature : " + type);
@@ -132,6 +131,7 @@
*/
public final int readContentSize() throws IOException {
int sizeType = 0;
+
short nodeType = getNodeType();
switch (nodeType) {
@@ -143,12 +143,13 @@
case Node.PROCESSING_INSTRUCTION_NODE:
case Node.COMMENT_NODE:
case Node.CDATA_SECTION_NODE:
- sizeType = Signatures.IntContent;
+ sizeType = Signatures.SIZE_INT;
break;
case Node.NOTATION_NODE:
sizeType = (byte) (signature & 0x03);
break;
+
default:
if (log.isWarnEnabled()) {
log.warn("invalid node type : " + nodeType);
@@ -157,16 +158,16 @@
switch (sizeType) {
- case Signatures.ByteContent:
+ case Signatures.SIZE_BYTE:
return readByte();
- case Signatures.ShortContent:
+ case Signatures.SIZE_SHORT:
return readShort();
- case Signatures.IntContent:
+ case Signatures.SIZE_INT:
return readInt();
- case Signatures.NoContent:
+ case Signatures.SIZE_NONE:
// Do Nothing
break;
@@ -175,6 +176,7 @@
log.warn("invalid size : " + sizeType);
}
}
+
return 0;
}
@@ -193,16 +195,16 @@
switch (countType) {
- case Signatures.ByteContent:
+ case Signatures.SIZE_BYTE:
return readByte();
- case Signatures.ShortContent:
+ case Signatures.SIZE_SHORT:
return readShort();
- case Signatures.IntContent:
+ case Signatures.SIZE_INT:
return readInt();
- case Signatures.NoContent:
+ case Signatures.SIZE_NONE:
// Do Nothing
break;
@@ -211,6 +213,7 @@
log.warn("invalid signature type : " + countType);
}
}
+
return 0;
}
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedOutput.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedOutput.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedOutput.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/XMLCompressedOutput.java Thu Mar 15 13:53:00 2007
@@ -50,13 +50,13 @@
*/
protected final byte getSizeType(long length) {
if (length > Short.MAX_VALUE) {
- return Signatures.IntContent;
+ return Signatures.SIZE_INT;
} else if (length > Byte.MAX_VALUE) {
- return Signatures.ShortContent;
+ return Signatures.SIZE_SHORT;
} else if (length > 0) {
- return Signatures.ByteContent;
+ return Signatures.SIZE_BYTE;
} else {
- return Signatures.NoContent;
+ return Signatures.SIZE_NONE;
}
}
@@ -71,11 +71,11 @@
*/
protected final int getSizeSize(int sizeType) {
switch (sizeType) {
- case Signatures.IntContent:
+ case Signatures.SIZE_INT:
return 4;
- case Signatures.ShortContent:
+ case Signatures.SIZE_SHORT:
return 2;
- case Signatures.ByteContent:
+ case Signatures.SIZE_BYTE:
return 1;
default:
return 0;
@@ -83,6 +83,21 @@
}
/**
+ * Writes the size to the output stream. Size type is determined
+ * based on the passed size value.
+ *
+ *
+ * @see org.apache.xindice.xml.Signatures
+ *
+ * @param size The size
+ * @return The size in bytes written
+ * @throws IOException If the write failed
+ */
+ protected final int writeSize(int size) throws IOException {
+ return writeSize(getSizeType(size), size);
+ }
+
+ /**
* writeSize writes the size to the output stream based on the
* specified sizeType.
*
@@ -96,15 +111,15 @@
protected final int writeSize(int sizeType, int size) throws IOException {
switch (sizeType) {
- case Signatures.IntContent:
+ case Signatures.SIZE_INT:
writeInt(size);
return 4;
- case Signatures.ShortContent:
+ case Signatures.SIZE_SHORT:
writeShort((short) size);
return 2;
- case Signatures.ByteContent:
+ case Signatures.SIZE_BYTE:
writeByte((byte) size);
return 1;
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/DOMCompressor.java Thu Mar 15 13:53:00 2007
@@ -89,14 +89,14 @@
symbolID = st.getSymbol(node.getNodeName(), true);
}
- byte signature = (byte) (Signatures.Elem << 0x6);
+ byte signature = Signatures.NODE_ELEM;
int attrLen = node.getAttributes().getLength();
int attrSize = getSizeType(attrLen);
if (attrLen > 0) {
- signature |= (byte) (Signatures.True << 0x5);
+ signature |= Signatures.ELEM_ATTRS;
}
if (node.hasChildNodes()) {
- signature |= (byte) (Signatures.True << 0x4);
+ signature |= Signatures.ELEM_CHILDREN;
}
signature |= (byte) (attrSize);
byte[] children = buildChildren(node);
@@ -134,7 +134,7 @@
byte[] b = node.getNodeValue().getBytes("UTF-8");
int valLen = b.length;
int sizeType = getSizeType(valLen + 5);
- byte signature = (byte) (Signatures.Char << 0x6);
+ byte signature = Signatures.NODE_TEXT;
signature |= (byte) (sizeType << 0x2);
writeByte(signature);
valLen += (getSizeSize(sizeType) + 1);
@@ -147,9 +147,7 @@
{
byte[] b = node.getNodeValue().getBytes("UTF-8");
int valLen = b.length;
- byte signature = (byte) (Signatures.Decl << 0x6);
- signature |= (byte) (Signatures.DeclCData << 0x2);
- writeByte(signature);
+ writeByte(Signatures.NODE_DECL | Signatures.DECL_CDATA);
valLen += 5;
writeInt(valLen);
write(b);
@@ -159,28 +157,28 @@
case Node.ENTITY_REFERENCE_NODE:
{
String value = node.getNodeName();
- byte signature = (byte) (Signatures.Char << 0x6);
- signature |= (byte) (Signatures.CharEntity << 0x4);
+ byte signature = Signatures.NODE_TEXT | Signatures.TEXT_ENTITY;
short symbol = 0;
int encoding = 0;
if (value.equals("&")) {
- signature |= (byte) (Signatures.EntAmp);
+ signature |= (byte) (Signatures.ENT_AMP);
} else if (value.equals("<")) {
- signature |= (byte) (Signatures.EntLt);
+ signature |= (byte) (Signatures.ENT_LT);
} else if (value.equals(">")) {
- signature |= (byte) (Signatures.EntGt);
+ signature |= (byte) (Signatures.ENT_GT);
} else if (value.equals(""")) {
- signature |= (byte) (Signatures.EntQuot);
+ signature |= (byte) (Signatures.ENT_QUOT);
} else if (value.equals("'")) {
- signature |= (byte) (Signatures.EntApos);
+ signature |= (byte) (Signatures.ENT_APOS);
} else if (value.startsWith("&#x")) {
encoding = 1;
- signature |= (byte) (Signatures.EntUnicode);
+ signature |= (byte) (Signatures.ENT_UNICODE);
// Convert the Unicode to a short
+ // TODO symbol =
} else {
encoding = 2;
symbol = st.getSymbol(value, true);
- signature |= (byte) (Signatures.EntDefined);
+ signature |= (byte) (Signatures.ENT_DEFINED);
}
writeByte(signature);
if (encoding > 0) {
@@ -199,8 +197,7 @@
String value = node.getNodeName() + " " + node.getNodeValue();
byte[] b = value.getBytes("UTF-8");
int valLen = b.length;
- byte signature = (byte) (Signatures.Proc << 0x6);
- writeByte(signature);
+ writeByte(Signatures.NODE_PROC);
valLen += 5;
writeInt(valLen);
write(b);
@@ -211,9 +208,7 @@
{
byte[] b = node.getNodeValue().getBytes("UTF-8");
int valLen = b.length;
- byte signature = (byte) (Signatures.Decl << 0x6);
- signature |= (byte) (Signatures.DeclComment << 0x2);
- writeByte(signature);
+ writeByte(Signatures.NODE_DECL | Signatures.DECL_COMMENT);
valLen += 5;
writeInt(valLen);
write(b);
@@ -278,17 +273,18 @@
if (node.getNodeType() == Node.ELEMENT_NODE) {
NamedNodeMap attrs = node.getAttributes();
int len = attrs.getLength();
- int sizeType = getSizeType(len);
- out.writeSize(sizeType, len);
+ out.writeSize(len);
for (int i = 0; i < len; i++) {
out.writeNode(attrs.item(i));
}
}
+
NodeList children = node.getChildNodes();
int len = children.getLength();
for (int i = 0; i < len; i++) {
out.writeNode(children.item(i));
}
+
return bos.toByteArray();
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityReferenceImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityReferenceImpl.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityReferenceImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/xml/dom/EntityReferenceImpl.java Thu Mar 15 13:53:00 2007
@@ -36,7 +36,8 @@
*
* @version $Revision$, $Date$
*/
-public final class EntityReferenceImpl extends NodeImpl implements EntityReference {
+public final class EntityReferenceImpl extends NodeImpl
+ implements EntityReference {
private static final Log log = LogFactory.getLog(EntityReferenceImpl.class);
@@ -77,38 +78,34 @@
byte entityType = (byte) (signature & 0x1F);
switch (entityType) {
- case Signatures.EntUnknown:
- nodeName = null;
- break;
-
- case Signatures.EntDefined:
+ case Signatures.ENT_DEFINED:
symbolID = xci.readShort();
nodeName = st.getName(symbolID);
break;
- case Signatures.EntAmp:
+ case Signatures.ENT_AMP:
nodeName = "&";
break;
- case Signatures.EntLt:
+ case Signatures.ENT_LT:
nodeName = "<";
break;
- case Signatures.EntGt:
+ case Signatures.ENT_GT:
nodeName = ">";
break;
- case Signatures.EntQuot:
+ case Signatures.ENT_QUOT:
nodeName = """;
break;
- case Signatures.EntApos:
+ case Signatures.ENT_APOS:
nodeName = "'";
break;
- case Signatures.EntUnicode:
+ case Signatures.ENT_UNICODE:
+ // TODO: Convert symbol to &#...;
nodeName = "";
- // TODO: This
break;
default:
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java?view=diff&rev=518751&r1=518750&r2=518751
==============================================================================
--- xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java (original)
+++ xml/xindice/trunk/java/tests/src/org/apache/xindice/xml/dom/NodeTest.java Thu Mar 15 13:53:00 2007
@@ -47,6 +47,7 @@
"<d attr3='c' attr5='d'/>" +
"</name:c>" +
"<d>Parent text<e>Child text</e></d>" +
+ "<!-- comment -->" +
"<x/>" +
"<cmp>" +
"<b/>" +
@@ -95,6 +96,12 @@
public void testCDATA() {
Node n = root.getFirstChild().getFirstChild().getNextSibling();
assertEquals("&&& CDATA Section! &&&", n.getTextContent());
+ }
+
+ public void testComment() {
+ Node n = ((Element) root).getElementsByTagName("x").item(0).getPreviousSibling();
+ assertEquals(Node.COMMENT_NODE, n.getNodeType());
+ assertEquals(" comment ", n.getTextContent());
}
public void testNodeEquality() throws Exception {