encodeArguments method

Uint8List encodeArguments(
  1. List<Object> args
)

Implementation

Uint8List encodeArguments(List<Object> args) {
  if (args.length > inputs.length) {
    throw Exception('Too many arguments: ${args.length} > ${inputs.length}');
  }
  var staticSize = 0;
  var dynamicCount = 0;
  for (final input in inputs) {
    final type = input.type;
    if (type.isDynamicType) {
      dynamicCount++;
    }
    staticSize += type.fixedSize;
  }

  final encodedArgs =
      List<Uint8List>.filled(args.length + dynamicCount, Uint8List(0));
  var dynamicPtr = staticSize;
  var cDynamicCount = 0;
  for (int i = 0; i < args.length; ++i) {
    final type = inputs[i].type;
    if (type.isDynamicType) {
      final dynArg = type.encode(args[i]);
      encodedArgs[i] = IntType.encodeFromInt(dynamicPtr);
      encodedArgs[args.length + cDynamicCount] = dynArg;
      cDynamicCount++;
      dynamicPtr += dynArg.lengthInBytes;
    } else {
      encodedArgs[i] = type.encode(args[i]);
    }
  }

  final encoded = BytesBuilder(copy: false);
  for (final encodedArg in encodedArgs) {
    encoded.add(encodedArg);
  }

  return encoded.takeBytes();
}