// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

part of swarmlib;

// TODO(jimhug): Fill out methods, add encoder, move to shared lib.
class Decoder {
  int index;
  String data;

  Decoder(this.data) {
    index = 0;
  }

  // Reads numbers in variable-length 7-bit encoding.  This matches the
  // varint encoding used by protobufs except that it only uses 7
  // bits per byte so it can be efficiently passed as UTF8.
  // For more info, see appengine/encoder.py.
  int readInt() {
    var r = 0;
    for (var i = 0;; i++) {
      var v = data.codeUnitAt(index++);
      r |= (v & 0x3F) << (6 * i);
      if ((v & 0x40) == 0) break;
    }
    return r.toInt();
  }

  bool readBool() {
    final ch = data[index++];
    assert(ch == 'T' || ch == 'F');
    return ch == 'T';
  }

  String readString() {
    int len = readInt();
    String s = data.substring(index, index + len);
    index += len;
    return s;
  }
}
