anchor.diff:     * Get the current size of the content of the sink.
      */
     int get size {
  -    if(_buffer == null)
  -      throw new StateError("This sink has already been closed.");
  +    _ensureNotClosed();
       return _count;
     }
   
  
positive.code:    * Reset the sink to an empty one.
     */
    void reset() {
      if(_buffer == null)
        throw new StateError("This sink has already been closed.");
      _count = 0;
    }
  
  
negative.code:    * Data types allowed: [TypedData] (f.e. [Uint8List]), [List]<int>, [int]
     */
    @override
    void add(dynamic/*TypedData|List<int>|int*/ bytes, [int offset, int length]) {
      _ensureNotClosed();
      // test for typed_data
      if(bytes is TypedData) {
        offset = offset == null ? 0 : offset;
        length = length == null ? bytes.lengthInBytes - offset : length;
        if(offset < 0 || length < 0 || offset > bytes.lengthInBytes ||
            (offset + length) > bytes.lengthInBytes || (offset + length) < 0) {
          throw new ArgumentError("Invalid offset or lenght.");
        } else if(length == 0) {
          return;
        }
        int newCount = _count + length;
        _ensureBufferSize(newCount);
        ByteBuffer bytesBuffer = bytes.buffer;
        _buffer.setRange(_count, newCount, bytesBuffer.asUint8List(bytes.offsetInBytes + offset, length));
        _count = newCount;
      }
      // test for List<int>
  