You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by tw...@apache.org on 2008/03/26 18:44:59 UTC

svn commit: r641434 - /incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java

Author: twgoetz
Date: Wed Mar 26 10:44:51 2008
New Revision: 641434

URL: http://svn.apache.org/viewvc?rev=641434&view=rev
Log:
Format

Modified:
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java?rev=641434&r1=641433&r2=641434&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASSerializer.java Wed Mar 26 10:44:51 2008
@@ -39,322 +39,306 @@
  */
 public class CASSerializer implements Serializable {
 
-	static final long serialVersionUID = -7972011651957420295L;
+  static final long serialVersionUID = -7972011651957420295L;
 
-	// The heap itself.
-	public int[] heapArray = null;
+  // The heap itself.
+  public int[] heapArray = null;
 
-	// Heap metadata. This is not strictly required, the heap can be
-	// deserialized
-	// without. Must be null if not used.
-	public int[] heapMetaData = null;
+  // Heap metadata. This is not strictly required, the heap can be
+  // deserialized
+  // without. Must be null if not used.
+  public int[] heapMetaData = null;
 
-	// The string table for strings that are feature structure values. Note that
-	// the 0th position in the string table should be null and will be ignored.
-	public String[] stringTable;
+  // The string table for strings that are feature structure values. Note that
+  // the 0th position in the string table should be null and will be ignored.
+  public String[] stringTable;
 
-	// All FSs in any index.
-	public int[] fsIndex;
+  // All FSs in any index.
+  public int[] fsIndex;
 
-	public byte[] byteHeapArray;
+  public byte[] byteHeapArray;
 
-	public short[] shortHeapArray;
+  public short[] shortHeapArray;
 
-	public long[] longHeapArray;
+  public long[] longHeapArray;
 
-	/**
+  /**
    * Constructor for CASSerializer.
    */
-	public CASSerializer() {
-		super();
-	}
+  public CASSerializer() {
+    super();
+  }
 
-	/**
+  /**
    * Serialize CAS data without heap-internal meta data. Currently used for serialization to C++.
    * 
    * @param casImpl
-   *          The CAS to be serialized.
+   *                The CAS to be serialized.
    */
-	public void addNoMetaData(CASImpl casImpl) {
-		addCAS(casImpl, false);
-	}
+  public void addNoMetaData(CASImpl casImpl) {
+    addCAS(casImpl, false);
+  }
 
-	/**
+  /**
    * Add the CAS to be serialized. Note that we need the implementation here, the interface is not
    * enough.
    * 
    * @param cas
-   *          The CAS to be serialized.
+   *                The CAS to be serialized.
    */
-	public void addCAS(CASImpl cas) {
-		addCAS(cas, true);
-	}
+  public void addCAS(CASImpl cas) {
+    addCAS(cas, true);
+  }
 
-	/**
+  /**
    * Add the CAS to be serialized. Note that we need the implementation here, the interface is not
    * enough.
    * 
    * @param cas
-   *          The CAS to be serialized.
+   *                The CAS to be serialized.
    */
-	public void addCAS(CASImpl cas, boolean addMetaData) {
-		this.fsIndex = cas.getIndexedFSs();
-		final int heapSize = cas.getHeap().getCellsUsed();
-		this.heapArray = new int[heapSize];
-		System.arraycopy(cas.getHeap().heap, 0, this.heapArray, 0, heapSize);
-		if (addMetaData) {
-			this.heapMetaData = cas.getHeap().getMetaData();
-		}
-		this.stringTable = stringArrayListToArray(cas.getStringTable());
-
-		final int byteHeapSize = cas.getByteHeap().getSize();
-		this.byteHeapArray = new byte[byteHeapSize];
-		System.arraycopy(cas.getByteHeap().heap, 0, this.byteHeapArray, 0, byteHeapSize);
-
-		final int shortHeapSize = cas.getShortHeap().getSize();
-		this.shortHeapArray = new short[shortHeapSize];
-		System.arraycopy(cas.getShortHeap().heap, 0, this.shortHeapArray, 0, shortHeapSize);
-
-		final int longHeapSize = cas.getLongHeap().getSize();
-		this.longHeapArray = new long[longHeapSize];
-		System.arraycopy(cas.getLongHeap().heap, 0, this.longHeapArray, 0, longHeapSize);
-	}
+  public void addCAS(CASImpl cas, boolean addMetaData) {
+    this.fsIndex = cas.getIndexedFSs();
+    final int heapSize = cas.getHeap().getCellsUsed();
+    this.heapArray = new int[heapSize];
+    System.arraycopy(cas.getHeap().heap, 0, this.heapArray, 0, heapSize);
+    if (addMetaData) {
+      this.heapMetaData = cas.getHeap().getMetaData();
+    }
+    this.stringTable = stringArrayListToArray(cas.getStringTable());
+
+    final int byteHeapSize = cas.getByteHeap().getSize();
+    this.byteHeapArray = new byte[byteHeapSize];
+    System.arraycopy(cas.getByteHeap().heap, 0, this.byteHeapArray, 0, byteHeapSize);
+
+    final int shortHeapSize = cas.getShortHeap().getSize();
+    this.shortHeapArray = new short[shortHeapSize];
+    System.arraycopy(cas.getShortHeap().heap, 0, this.shortHeapArray, 0, shortHeapSize);
+
+    final int longHeapSize = cas.getLongHeap().getSize();
+    this.longHeapArray = new long[longHeapSize];
+    System.arraycopy(cas.getLongHeap().heap, 0, this.longHeapArray, 0, longHeapSize);
+  }
 
-	/**
+  /**
    * Serializes the CAS data and writes it to the output stream.
-   * --------------------------------------------------------------------- 
-   * Blob Format
+   * --------------------------------------------------------------------- Blob Format
    * 
-   * Element Size     Number of  Description
-   *   (bytes)        Elements
-   *  ------------    ---------  -------------------------------- 
-   *      4               1      Blob key = "UIMA" in utf-8
-   *      4               1      Version (currently = 1)
-   *      4               1      size of 32-bit FS Heap array = s32H
-   *      4             s32H     32-bit FS heap array
-   *      4               1      size of 16-bit string Heap array = sSH
-   *      2              sSH     16-bit string heap array
-   *      4               1      size of string Ref Heap array = sSRH
-   *      4             2*sSRH   string ref offsets and lengths
-   *      4               1      size of FS index array = sFSI
-   *      4             sFSI     FS index array
+   * Element Size Number of Description (bytes) Elements ------------ ---------
+   * -------------------------------- 4 1 Blob key = "UIMA" in utf-8 4 1 Version (currently = 1) 4 1
+   * size of 32-bit FS Heap array = s32H 4 s32H 32-bit FS heap array 4 1 size of 16-bit string Heap
+   * array = sSH 2 sSH 16-bit string heap array 4 1 size of string Ref Heap array = sSRH 4 2*sSRH
+   * string ref offsets and lengths 4 1 size of FS index array = sFSI 4 sFSI FS index array
    * 
-   *      4               1      size of 8-bit Heap array = s8H
-   *      1              s8H     8-bit Heap array
-   *      4               1      size of 16-bit Heap array = s16H
-   *      2             s16H     16-bit Heap array
-   *      4               1      size of 64-bit Heap array = s64H
-   *      8             s64H     64-bit Heap array
+   * 4 1 size of 8-bit Heap array = s8H 1 s8H 8-bit Heap array 4 1 size of 16-bit Heap array = s16H
+   * 2 s16H 16-bit Heap array 4 1 size of 64-bit Heap array = s64H 8 s64H 64-bit Heap array
    * ---------------------------------------------------------------------
    * 
-   * This reads in and deserializes CAS data from a stream.
-   * Byte swapping may be needed is the blob is from C++ --
-   * C++ blob serialization writes data in native byte order.
+   * This reads in and deserializes CAS data from a stream. Byte swapping may be needed is the blob
+   * is from C++ -- C++ blob serialization writes data in native byte order.
    * 
    * @param cas
-   *          The CAS to be serialized. 
-   *        ostream
-   *          The output stream.
+   *                The CAS to be serialized. ostream The output stream.
    */
-	public void addCAS(CASImpl cas, OutputStream ostream) {
+  public void addCAS(CASImpl cas, OutputStream ostream) {
 
-		try {
+    try {
 
-			DataOutputStream dos = new DataOutputStream(ostream);
+      DataOutputStream dos = new DataOutputStream(ostream);
 
-			// get the indexed FSs
-			this.fsIndex = cas.getIndexedFSs();
+      // get the indexed FSs
+      this.fsIndex = cas.getIndexedFSs();
 
-			// output the key and version number
-
-			byte[] uima = new byte[4];
-			uima[0] = 85; // U
-			uima[1] = 73; // I
-			uima[2] = 77; // M
-			uima[3] = 65; // A
-
-			ByteBuffer buf = ByteBuffer.wrap(uima);
-			int key = buf.asIntBuffer().get();
-
-			int version = 1;
-			dos.writeInt(key);
-			dos.writeInt(version);
-
-			// output the FS heap
-			final int heapSize = cas.getHeap().getCellsUsed();
-			dos.writeInt(heapSize);
-			for (int i = 0; i < heapSize; i++) {
-				dos.writeInt(cas.getHeap().heap[i]);
-			}
-
-			// output the strings
-			// strings in the StringList will be serialized out as if the
-			// were in the string heap.
-
-			// local array to hold ref heap to be serialized
-			// String list reference in this local ref heap will be updated to be string heap references.
-			int[] refheap = new int[cas.getStringHeap().refHeapPos];
-			for (int i = 0; i < refheap.length; i++) {
-				refheap[i] = cas.getStringHeap().refHeap[i];
-			}
-
-			// compute the number of total size of data in stringHeap
-			// total size = char buffer length + length of strings in the string list;
-			int stringHeapLength = cas.getStringHeap().charHeapPos;
-            int stringListLength = 0;
-			for (int i = 0; i < refheap.length; i += 3) {
-				int ref = refheap[i + StringHeap.STRING_LIST_ADDR_OFFSET];
-				// this is a string in the string list
-				// get length and add to total string heap length
-				if (ref != 0) {
-                    // terminate each string with a null
-					stringListLength += 1 + ((String) cas.getStringHeap().stringList.get(ref)).length();
-				}
-			}
-			
-            int stringTotalLength = stringHeapLength + stringListLength;
-            if ( stringHeapLength == 0 && stringListLength > 0 ) {
-               // nothing from stringHeap
-               // add 1 for the null at the beginning
-               stringTotalLength += 1;
+      // output the key and version number
+
+      byte[] uima = new byte[4];
+      uima[0] = 85; // U
+      uima[1] = 73; // I
+      uima[2] = 77; // M
+      uima[3] = 65; // A
+
+      ByteBuffer buf = ByteBuffer.wrap(uima);
+      int key = buf.asIntBuffer().get();
+
+      int version = 1;
+      dos.writeInt(key);
+      dos.writeInt(version);
+
+      // output the FS heap
+      final int heapSize = cas.getHeap().getCellsUsed();
+      dos.writeInt(heapSize);
+      for (int i = 0; i < heapSize; i++) {
+        dos.writeInt(cas.getHeap().heap[i]);
+      }
+
+      // output the strings
+      // strings in the StringList will be serialized out as if the
+      // were in the string heap.
+
+      // local array to hold ref heap to be serialized
+      // String list reference in this local ref heap will be updated to be string heap references.
+      int[] refheap = new int[cas.getStringHeap().refHeapPos];
+      for (int i = 0; i < refheap.length; i++) {
+        refheap[i] = cas.getStringHeap().refHeap[i];
+      }
+
+      // compute the number of total size of data in stringHeap
+      // total size = char buffer length + length of strings in the string list;
+      int stringHeapLength = cas.getStringHeap().charHeapPos;
+      int stringListLength = 0;
+      for (int i = 0; i < refheap.length; i += 3) {
+        int ref = refheap[i + StringHeap.STRING_LIST_ADDR_OFFSET];
+        // this is a string in the string list
+        // get length and add to total string heap length
+        if (ref != 0) {
+          // terminate each string with a null
+          stringListLength += 1 + ((String) cas.getStringHeap().stringList.get(ref)).length();
+        }
+      }
+
+      int stringTotalLength = stringHeapLength + stringListLength;
+      if (stringHeapLength == 0 && stringListLength > 0) {
+        // nothing from stringHeap
+        // add 1 for the null at the beginning
+        stringTotalLength += 1;
+      }
+      dos.writeInt(stringTotalLength);
+
+      // write the data in the stringheap, if there is any
+      if (stringTotalLength > 0) {
+        if (cas.getStringHeap().charHeapPos > 0) {
+          dos.writeChars(String.valueOf(cas.getStringHeap().stringHeap, 0,
+              cas.getStringHeap().charHeapPos));
+        } else {
+          // no stringheap data
+          // if there is data in the string lists, write a leading 0
+          if (stringListLength > 0) {
+            dos.writeChar(0);
+          }
+        }
+
+        // write out the data in the StringList and update the
+        // reference in the local ref heap.
+        if (stringListLength > 0) {
+          int pos = cas.getStringHeap().charHeapPos > 0 ? cas.getStringHeap().charHeapPos : 1;
+          for (int i = 0; i < refheap.length; i += 3) {
+            int ref = refheap[i + StringHeap.STRING_LIST_ADDR_OFFSET];
+            // this is a string in the string list
+            if (ref != 0) {
+              // update the ref
+              refheap[i + StringHeap.CHAR_HEAP_POINTER_OFFSET] = pos;
+              // write out the chars in the string
+              dos.writeChars((String) cas.getStringHeap().stringList.get(ref));
+              dos.writeChar(0); // null terminate each string
+              // update pos
+              pos += 1 + ((String) cas.getStringHeap().stringList.get(ref)).length();
             }
-				dos.writeInt(stringTotalLength);
+          }
+        }
 
-            //write the data in the stringheap, if there is any
-            if (stringTotalLength > 0) {
-                if (cas.getStringHeap().charHeapPos > 0) {
-                    dos.writeChars( String.valueOf(cas.getStringHeap().stringHeap, 0, cas.getStringHeap().charHeapPos) );
-                }
-                else {
-                    // no stringheap data
-                    //if there is data in the string lists, write a leading 0
-                    if ( stringListLength > 0 ) {
-                        dos.writeChar(0);
-                    }
-                }
-				
-                //write out the data in the StringList and update the 
-                //reference in the local ref heap.
-                if ( stringListLength > 0 ) {
-                    int pos = cas.getStringHeap().charHeapPos > 0 ? cas.getStringHeap().charHeapPos : 1;
-                    for (int i=0; i < refheap.length; i+=3) {
-                        int ref = refheap[i+StringHeap.STRING_LIST_ADDR_OFFSET];
-                        //this is a string in the string list
-                        if (ref !=0) {
-                            //update the ref					
-                            refheap[i+StringHeap.CHAR_HEAP_POINTER_OFFSET] = pos;
-                            //write out the chars in the string
-                            dos.writeChars((String)cas.getStringHeap().stringList.get(ref));
-                            dos.writeChar(0); // null terminate each string
-                            //update pos
-                            pos += 1 + ((String) cas.getStringHeap().stringList.get(ref)).length(); 
-                        }				
-                    }
-                }
-
-                //word alignment
-                if (stringTotalLength % 2  != 0) {
-                    dos.writeChar(0);
-                }
-			}
-
-			// write out the string ref heap
-			// each reference consist of a offset into stringheap and a length
-			int refheapsz = ((refheap.length - StringHeap.FIRST_CELL_REF) / StringHeap.REF_HEAP_CELL_SIZE) * 2;
-			refheapsz++;
-			dos.writeInt(refheapsz);
-			dos.writeInt(0);
-			for (int i = StringHeap.FIRST_CELL_REF; i < refheap.length; i += 3) {
-				dos.writeInt(refheap[i + StringHeap.CHAR_HEAP_POINTER_OFFSET]);
-				dos.writeInt(refheap[i + StringHeap.CHAR_HEAP_STRLEN_OFFSET]);
-			}
-
-			// output the index FSs
-			dos.writeInt(this.fsIndex.length);
-			for (int i = 0; i < this.fsIndex.length; i++) {
-				dos.writeInt(this.fsIndex[i]);
-			}
-
-			// 8bit heap
-			int byteheapsz = cas.getByteHeap().getSize();
-			dos.writeInt(byteheapsz);
-			for (int i = 0; i < cas.getByteHeap().getSize(); i++) {
-				dos.writeByte(cas.getByteHeap().heap[i]);
-			}
+        // word alignment
+        if (stringTotalLength % 2 != 0) {
+          dos.writeChar(0);
+        }
+      }
+
+      // write out the string ref heap
+      // each reference consist of a offset into stringheap and a length
+      int refheapsz = ((refheap.length - StringHeap.FIRST_CELL_REF) / StringHeap.REF_HEAP_CELL_SIZE) * 2;
+      refheapsz++;
+      dos.writeInt(refheapsz);
+      dos.writeInt(0);
+      for (int i = StringHeap.FIRST_CELL_REF; i < refheap.length; i += 3) {
+        dos.writeInt(refheap[i + StringHeap.CHAR_HEAP_POINTER_OFFSET]);
+        dos.writeInt(refheap[i + StringHeap.CHAR_HEAP_STRLEN_OFFSET]);
+      }
+
+      // output the index FSs
+      dos.writeInt(this.fsIndex.length);
+      for (int i = 0; i < this.fsIndex.length; i++) {
+        dos.writeInt(this.fsIndex[i]);
+      }
+
+      // 8bit heap
+      int byteheapsz = cas.getByteHeap().getSize();
+      dos.writeInt(byteheapsz);
+      for (int i = 0; i < cas.getByteHeap().getSize(); i++) {
+        dos.writeByte(cas.getByteHeap().heap[i]);
+      }
 
-			// word alignment
+      // word alignment
       int align = (4 - (byteheapsz % 4)) % 4;
-			for (int i = 0; i < align; i++) {
-				dos.writeByte(0);
-			}
-
-			// 16bit heap
-			int shortheapsz = cas.getShortHeap().getSize();
-			dos.writeInt(shortheapsz);
-			for (int i = 0; i < cas.getShortHeap().getSize(); i++) {
-				dos.writeShort(cas.getShortHeap().heap[i]);
-			}
+      for (int i = 0; i < align; i++) {
+        dos.writeByte(0);
+      }
+
+      // 16bit heap
+      int shortheapsz = cas.getShortHeap().getSize();
+      dos.writeInt(shortheapsz);
+      for (int i = 0; i < cas.getShortHeap().getSize(); i++) {
+        dos.writeShort(cas.getShortHeap().heap[i]);
+      }
 
-			// word alignment
+      // word alignment
       if (shortheapsz % 2 != 0) {
         dos.writeShort(0);
-			}
+      }
 
-			// 64bit heap
-			int longheapsz = cas.getLongHeap().getSize();
-			dos.writeInt(longheapsz);
-			for (int i = 0; i < cas.getLongHeap().getSize(); i++) {
-				dos.writeLong(cas.getLongHeap().heap[i]);
-			}
-		} catch (IOException e) {
-			CASRuntimeException exception = new CASRuntimeException(
-					CASRuntimeException.BLOB_SERIALIZATION, new String[] { e.getMessage() });
-			throw exception;
-		}
+      // 64bit heap
+      int longheapsz = cas.getLongHeap().getSize();
+      dos.writeInt(longheapsz);
+      for (int i = 0; i < cas.getLongHeap().getSize(); i++) {
+        dos.writeLong(cas.getLongHeap().heap[i]);
+      }
+    } catch (IOException e) {
+      CASRuntimeException exception = new CASRuntimeException(
+          CASRuntimeException.BLOB_SERIALIZATION, new String[] { e.getMessage() });
+      throw exception;
+    }
 
-	}
+  }
 
-	/**
+  /**
    * Method stringArrayListToArray.
    * 
    * @param arrayList
    * @return String[]
    */
-	private String[] stringArrayListToArray(ArrayList arrayList) {
-		final int max = arrayList.size();
-		String[] ar = new String[max];
-		for (int i = 0; i < max; i++) {
-			ar[i] = (String) arrayList.get(i);
-		}
-		return ar;
-	}
-
-	int[] getHeapMetadata() {
-		return this.heapMetaData;
-	}
-
-	int[] getHeapArray() {
-		return this.heapArray;
-	}
-
-	String[] getStringTable() {
-		return this.stringTable;
-	}
-
-	int[] getFSIndex() {
-		return this.fsIndex;
-	}
-
-	byte[] getByteArray() {
-		return this.byteHeapArray;
-	}
-
-	short[] getShortArray() {
-		return this.shortHeapArray;
-	}
-
-	long[] getLongArray() {
-		return this.longHeapArray;
-	}
+  private String[] stringArrayListToArray(ArrayList arrayList) {
+    final int max = arrayList.size();
+    String[] ar = new String[max];
+    for (int i = 0; i < max; i++) {
+      ar[i] = (String) arrayList.get(i);
+    }
+    return ar;
+  }
+
+  int[] getHeapMetadata() {
+    return this.heapMetaData;
+  }
+
+  int[] getHeapArray() {
+    return this.heapArray;
+  }
+
+  String[] getStringTable() {
+    return this.stringTable;
+  }
+
+  int[] getFSIndex() {
+    return this.fsIndex;
+  }
+
+  byte[] getByteArray() {
+    return this.byteHeapArray;
+  }
+
+  short[] getShortArray() {
+    return this.shortHeapArray;
+  }
+
+  long[] getLongArray() {
+    return this.longHeapArray;
+  }
 
 }