| // Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| /// Defines basic operations like substraction, multiplication, division. | |
| library; | |
| import '../common/common.dart'; | |
| class SubtractionOperation implements Operation { | |
| @override | |
| String get name => '-'; | |
| @override | |
| num apply(List<num> arguments) { | |
| if (arguments.isEmpty) return 0; | |
| return arguments.reduce((value, element) => value - element); | |
| } | |
| } | |
| class MultiplicationOperation implements Operation { | |
| @override | |
| String get name => '*'; | |
| @override | |
| num apply(List<num> arguments) { | |
| if (arguments.isEmpty) return 1; | |
| return arguments.reduce((value, element) => value * element); | |
| } | |
| } | |
| class DivisionOperation implements Operation { | |
| @override | |
| String get name => '/'; | |
| @override | |
| num apply(List<num> arguments) { | |
| if (arguments.isEmpty) { | |
| throw ArgumentError('Division requires at least one argument.'); | |
| } | |
| return arguments.reduce((value, element) => value / element); | |
| } | |
| } | |
| /// The entrypoint of th edynamic module returns a `void Function(Registry)` | |
| /// that, when invoke, registers all operations defined by this module. | |
| @pragma('dyn-module:entry-point') | |
| Object? dynamicModuleEntrypoint() { | |
| return (Registry registry) { | |
| registry.addOperation(SubtractionOperation()); | |
| registry.addOperation(MultiplicationOperation()); | |
| registry.addOperation(DivisionOperation()); | |
| }; | |
| } |