You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@daffodil.apache.org by GitBox <gi...@apache.org> on 2018/07/09 15:41:07 UTC

[GitHub] mbeckerle commented on a change in pull request #77: Modifications to IO layer to support streaming input data

mbeckerle commented on a change in pull request #77: Modifications to IO layer to support streaming input data
URL: https://github.com/apache/incubator-daffodil/pull/77#discussion_r201041175
 
 

 ##########
 File path: daffodil-io/src/main/scala/org/apache/daffodil/processors/charset/BitsCharsetDecoder.scala
 ##########
 @@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.daffodil.processors.charset
+
+import java.nio.CharBuffer
+import java.nio.LongBuffer
+
+import org.apache.daffodil.exceptions.Assert
+import org.apache.daffodil.exceptions.ThinThrowable
+import org.apache.daffodil.io.InputSourceDataInputStream
+import org.apache.daffodil.io.DataInputStream.NotEnoughDataException
+import org.apache.daffodil.io.FormatInfo
+import org.apache.daffodil.schema.annotation.props.gen.EncodingErrorPolicy
+import org.apache.daffodil.util.MaybeChar
+
+
+class BitsCharsetDecoderMalformedException(val malformedBits: Int)
+  extends Exception with ThinThrowable
+
+trait BitsCharsetDecoderState
+
+abstract class BitsCharsetDecoder {
+
+  /**
+   * Decode a single character
+   *
+   * This should read data via the InputSourceDataInputStream in whatever manner is most
+   * efficient, as long as at the end of the decode the bitPosition0b is set to
+   * to end of the character.
+   *
+   * If there was a decode error, the bit position should be set to the end of
+   * malformed bits and a BitsCharsetDecoderMalformedException should be thrown
+   * specifying how many bits were malformed.
+   */
+  protected def decodeOneChar(dis: InputSourceDataInputStream, finfo: FormatInfo): Char
+
+  /**
+   * Decode multiple characters into a CharBuffer, keeping track of the
+   * bit positions after each Char decode
+   *
+   * Decodes at most chars.remaining() characters in the chars CharBuffer. If
+   * bitPositions is provided, for each decoded character the bitPosition0b
+   * where the character decode operation finished is stored in the
+   * bitPositions LongBuffer. Upon return of the decode operation, the
+   * bitPosition0b of the InputSourceDataInputStream will be the end of the last
+   * successful character decode operation. Returns the number of successfully
+   * decode characters.
+   */
+  final def decode(dis: InputSourceDataInputStream, finfo: FormatInfo, chars: CharBuffer, bitPositions: LongBuffer = null): Int = {
 
 Review comment:
   It's pretty clear from review here that the approach of implementing our own decoders, vs. all that complexity of dealing with Java decoders, is the correct trade off. These decoders are entirely straightforward, and the code using them. This is way simpler in total this way. 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services