         if part.unpacked
           loop
             b = buffer[offset]
-            @bytesRead++
+            @_bytesRead++
             offset++
             @value[@offset] = b
             @offset += @increment
             break if @offset is @terminal
-            return @bytesRead - start if offset is end
+            return @_bytesRead - start if offset is end
 
         # Otherwise we're packing bytes into an unsigned integer, the most
         # common case.
         else
           loop
             b = buffer[offset]
-            @bytesRead++
+            @_bytesRead++
             offset++
             @value += Math.pow(256, @offset) * b
             @offset += @increment
             break if @offset == @terminal
-            return @bytesRead - start if offset is end
+            return @_bytesRead - start if offset is end
 
         # Unpack the field value.
         bytes = value = @value

          @nextField()
          @nextValue()

    @bytesRead - start

  close: ->
    @emit "close"


  data: (data...)   -> @user = data

  getBytesRead:     -> @_bytesRead

  nextField: ->
    pattern       = @pattern[@patternIndex]
