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 {
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.