                 unpacked = Math.floor(value / Math.pow(2, sum))
                 unpacked = unpacked % Math.pow(2, pack.bits)
                 @_fields.push(unpacked)
+
+          # If the value is a length encoding, we set the repeat value for the
+          # subsequent array of values. If we have a zero length encoding, we
+          # push an empty array through the pipeline, and skip the repeated type.
           else if part.lengthEncoding
-            # If we have a zero length encoding, we push an empty array through
-            # the pipeline, and skip the repeated type.
             if (@pattern[@patternIndex + 1].repeat = value) is 0
               @_fields.push(@pipeline(part, []))
               @patternIndex++
+
+          # Otherwise, the value is what it is, so run it through the user
+          # supplied tranformation pipeline, and push it onto the list of fields.
           else
             value = @_arrayed if part.arrayed
             @_fields.push(@pipeline(part, value))

          @nextField()
          @nextValue()

    @_bytesRead - start

  close: ->

      # If we've not yet hit our terminator, check for the terminator. If we've
      # hit the terminator, and we do not have a maximum size to fill, then
      # terminate by setting up the array to terminate.
      #
      # A maximum length value means to repeat until the terminator, but a
      # specific length value means that the zero terminated string occupies a
      # field that has a fixed length, so we need to skip the used bytes.
      if not @terminated
        if part.terminator.charCodeAt(0) == value
          @terminated = true
          if @repeat == Number.MAX_VALUE
            @repeat = @index + 1
          else
