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("&amp;")) {
-                        signature |= (byte) (Signatures.EntAmp);
+                        signature |= (byte) (Signatures.ENT_AMP);
                     } else if (value.equals("&lt;")) {
-                        signature |= (byte) (Signatures.EntLt);
+                        signature |= (byte) (Signatures.ENT_LT);
                     } else if (value.equals("&gt;")) {
-                        signature |= (byte) (Signatures.EntGt);
+                        signature |= (byte) (Signatures.ENT_GT);
                     } else if (value.equals("&quot;")) {
-                        signature |= (byte) (Signatures.EntQuot);
+                        signature |= (byte) (Signatures.ENT_QUOT);
                     } else if (value.equals("&apos;")) {
-                        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 = "&amp;";
                         break;
 
-                    case Signatures.EntLt:
+                    case Signatures.ENT_LT:
                         nodeName = "&lt;";
                         break;
 
-                    case Signatures.EntGt:
+                    case Signatures.ENT_GT:
                         nodeName = "&gt;";
                         break;
 
-                    case Signatures.EntQuot:
+                    case Signatures.ENT_QUOT:
                         nodeName = "&quot;";
                         break;
 
-                    case Signatures.EntApos:
+                    case Signatures.ENT_APOS:
                         nodeName = "&apos;";
                         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 {