// 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) {
    this.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;
  }
}
