 
 extension Unicode.UTF8 : UnicodeEncoding {
   public struct ForwardDecoder {
-    public init() { _bufferStorage = 0; _bitsInBuffer = 0 }
-    var _bufferStorage: UInt32
-    var _bitsInBuffer: UInt8
-  }
-
+    public typealias Buffer = _UIntBuffer<UInt32, UInt8>
+    public init() { buffer = Buffer() }
+    public var buffer: Buffer
+  }
   public struct ReverseDecoder {
-    public init() { _bufferStorage = 0; _bitsInBuffer = 0 }
-    var _bufferStorage: UInt32
-    var _bitsInBuffer: UInt8
+    public typealias Buffer = _UIntBuffer<UInt32, UInt8>
+    public init() { buffer = Buffer() }
+    public var buffer: Buffer
   }
 }
 

  init(_unchecked x: UInt32) { self = unsafeBitCast(x, to: UnicodeScalar.self) }
}
//===----------------------------------------------------------------------===//

public enum Unicode {
  public typealias UTF8 = Swift.UTF8

}

public protocol UnicodeDecoder {
  associatedtype CodeUnit : UnsignedInteger, FixedWidthInteger
  associatedtype Buffer : Collection where Buffer.Iterator.Element == CodeUnit
  
  init()

  var buffer: Buffer { get }

  mutating func parseOne<I : IteratorProtocol>(
    _ input: inout I
  ) -> Unicode.ParseResult<UInt32> where I.Element == CodeUnit
