encodeArguments method
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();
}