BaseValue constructor

BaseValue(
  1. int size,
  2. dynamic value, {
  3. dynamic tag,
})

Implementation

BaseValue(this.size, this.value, {dynamic tag})
    : _tag = [tag] {
  if (value is String) {
    try {
      if(size == 8) {
        value = BigInt.parse(value);
      } else {
        value = int.parse(value);
      }
    } catch (_) {
      tryHexString(value);
      if(size == 8) {
        value = BigInt.parse(value, radix: 16);
      } else {
        value = int.parse(value, radix: 16);
      }
    }
  } else if (value is int && size == 8) {
    value = BigInt.from(value).toUnsigned(64);
  }

  // check bounds
  var bitSize = size * 8;

  var upperBound = size == 8 ? BigInt.parse('18446744073709551615').toUnsigned(64) : bitmask(bitSize);
  var lowerBound = size == 8 ? BigInt.from(0).toUnsigned(64) : 0;

  if (value < lowerBound || value > upperBound) {
    var valueRangeMessage = '$value must be in range [$lowerBound, $upperBound]';
    throw ArgumentError('$valueRangeMessage for $size bytes');
  }
}