div_ function

Tensor div_(
  1. dynamic a,
  2. dynamic b, {
  3. String rounding_mode = "",
})

Implementation

Tensor div_(dynamic a, dynamic b, {String rounding_mode = ""}) {
  if (a is num) {
    return div_(b, a);
  } else if (a is Tensor) {
    if (b is Tensor) {
      final units = utf8.encode(rounding_mode);
      // 在本地分配足够的内存来复制这个 Uint8List
      final Pointer<Uint8> result =
          malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
      // 获取 Uint8List 的指针
      final Uint8List nativeString = result.asTypedList(units.length + 1);
      // 将 Uint8List 复制到分配的内存中
      nativeString.setRange(0, units.length, units);
      // 确保以 null 字节结尾,满足 C 语言对字符串的要求
      nativeString[units.length] = 0;
      // 返回指向已编码字符串的指针

      final rounding_mode_Utf8 =
          rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();

      Tensor_div_(a._tensorPtr, b._tensorPtr, rounding_mode_Utf8);
      final errorMsg = _get_and_reset_last_err();
      if (errorMsg != nullptr) {
        final errorString = errorMsg.cast<Utf8>().toDartString();

        throw Exception(errorString);
      }

      final tensor = Tensor._internal(a._tensorPtr);
      return tensor;
    } else if (b is num) {
      if (b is int) {
        final rightScalar = int32_to_scalar(b);

        final units = utf8.encode(rounding_mode);
        // 在本地分配足够的内存来复制这个 Uint8List
        final Pointer<Uint8> result =
            malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
        // 获取 Uint8List 的指针
        final Uint8List nativeString = result.asTypedList(units.length + 1);
        // 将 Uint8List 复制到分配的内存中
        nativeString.setRange(0, units.length, units);
        // 确保以 null 字节结尾,满足 C 语言对字符串的要求
        nativeString[units.length] = 0;
        // 返回指向已编码字符串的指针
        final rounding_mode_Utf8 =
            rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();

        Tensor_div_scalar_(
            a._tensorPtr, rightScalar.scalarPtr, rounding_mode_Utf8);
        final errorMsg = _get_and_reset_last_err();
        if (errorMsg != nullptr) {
          final errorString = errorMsg.cast<Utf8>().toDartString();

          throw Exception(errorString);
        }

        final tensor = Tensor._internal(a._tensorPtr);
        return tensor;
      } else if (b is double) {
        final rightScalar = float64_to_scalar(b);
        final units = utf8.encode(rounding_mode);
        // 在本地分配足够的内存来复制这个 Uint8List
        final Pointer<Uint8> result =
            malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
        // 获取 Uint8List 的指针
        final Uint8List nativeString = result.asTypedList(units.length + 1);
        // 将 Uint8List 复制到分配的内存中
        nativeString.setRange(0, units.length, units);
        // 确保以 null 字节结尾,满足 C 语言对字符串的要求
        nativeString[units.length] = 0;
        // 返回指向已编码字符串的指针
        final rounding_mode_Utf8 =
            rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();

        Tensor_div_scalar_(
            a._tensorPtr, rightScalar.scalarPtr, rounding_mode_Utf8);
        final errorMsg = _get_and_reset_last_err();
        if (errorMsg != nullptr) {
          final errorString = errorMsg.cast<Utf8>().toDartString();

          throw Exception(errorString);
        }

        final tensor = Tensor._internal(a._tensorPtr);
        return tensor;
      } else {
        throw Exception("wrong data type");
      }
    } else {
      throw Exception("wrong data type.");
    }
  } else {
    throw Exception("wrong data type.");
  }
}