netmask_to_prefix static method

Result<int, String> netmask_to_prefix(
  1. BigInt nm,
  2. int bits
)

Implementation

static Result<int, String> netmask_to_prefix(BigInt nm, int bits) {
  var prefix = 0;
  var addr = nm;
  var in_host_part = true;
  final two = BigInt.from(2);
  for (var i = 0; i < bits; i++) {
    final bit = addr % two;
    if (in_host_part && bit == BigInt.zero) {
      prefix = prefix + 1;
    } else if (in_host_part && bit == BigInt.one) {
      in_host_part = false;
    } else if (!in_host_part && bit == BigInt.zero) {
      return Result.error("this is not a net mask ${nm}");
    }
    addr = addr >> 1;
  }
  return Result.ok(bits - prefix);
}