Github user mbeckerle commented on a diff in the pull request:
https://github.com/apache/incubator-daffodil/pull/12#discussion_r153951208
--- Diff:
daffodil-io/src/main/scala/edu/illinois/ncsa/daffodil/io/FormatInfo.scala ---
@@ -0,0 +1,49 @@
+package edu.illinois.ncsa.daffodil.io
+
+import java.nio.charset.CharsetDecoder
+import java.nio.charset.CharsetEncoder
+import edu.illinois.ncsa.daffodil.schema.annotation.props.gen.BitOrder
+import edu.illinois.ncsa.daffodil.schema.annotation.props.gen.ByteOrder
+import
edu.illinois.ncsa.daffodil.schema.annotation.props.gen.BinaryFloatRep
+import edu.illinois.ncsa.daffodil.util.MaybeInt
+import java.nio.charset.Charset
+import java.nio.charset.CodingErrorAction
+import
edu.illinois.ncsa.daffodil.schema.annotation.props.gen.EncodingErrorPolicy
+import edu.illinois.ncsa.daffodil.util.Maybe
+import edu.illinois.ncsa.daffodil.schema.annotation.props.gen.UTF16Width
+
+/**
+ * Abstract interface to obtain format properties.
+ *
+ * By passing in an object that provides quick access to these, we avoid
the
+ * need to have setters/getters that change state in the I/O layer.
+ */
+trait FormatInfo {
+ def encoder: CharsetEncoder
+ def decoder: CharsetDecoder
+ def reportingDecoder: CharsetDecoder
+ def replacingDecoder: CharsetDecoder
+ def codingErrorAction: CodingErrorAction
+ def isFixedWidthEncoding: Boolean
+ def byteOrder: ByteOrder
+ final def jByteOrder = byteOrder match {
+ case ByteOrder.BigEndian => java.nio.ByteOrder.BIG_ENDIAN
+ case _ => java.nio.ByteOrder.LITTLE_ENDIAN
+ }
+ def bitOrder: BitOrder
+ def fillByte: Byte
+ final lazy val fillLong = {
+ var fl: Long = 0L
+ val fb = fillByte
+ 1 to 8 foreach { _ =>
--- End diff --
Use a while loop, or inline code this whole thing. This is inner-most
performance sensitive code.
---