From 6133e58226b84aae86fcd38bd745b48d63e0eea6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 11 Feb 2026 09:07:13 +0100 Subject: [PATCH] FormulaElement as abstract class --- TODO.md | 3 ++- flutterw | 2 +- lib/corpus.dart | 3 ++- lib/defaults/default_corpus.dart | 6 ++++-- lib/formula_models.dart | 18 ++++++++++-------- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index 500228a..f67a06e 100644 --- a/TODO.md +++ b/TODO.md @@ -17,7 +17,8 @@ - Drift files have a lot of duplicate code. "web" version is the same as native version, only _openConnection is diferrent. Refactor to not duplicate code. - [X] Create Formula.toStringLiteral. It is the reverse of Formula.fromSet( Formula.fromArrayStringLiteral(string)[0] ) - [X] Create UnitSpec.toStringLiteral, like Formula.toStringLiteral -- [ ] Make Formula and UnitSpec subclasses of FormulaElement. Change return type of functions that return Object to FormulaElement if necessary. +- [X] Make Formula and UnitSpec subclasses of FormulaElement. Change return type of functions that return Object to FormulaElement if necessary. +- [ ] Define toStringLiteral in FormulaElement. - Database file location: - [ ] In linux, the sqlite database file will be located following rules at https://specifications.freedesktop.org/basedir/latest/ - [ ] In Windows, the sqlite database file will be in %appdata%/Roaming diff --git a/flutterw b/flutterw index 9fb2dd0..e4b5f02 100755 --- a/flutterw +++ b/flutterw @@ -1,7 +1,7 @@ #!/bin/bash set -e -set -x +#set -x BUILDCACHE=./.build-container-cache DOCKERFILE=./docker/Dockerfile diff --git a/lib/corpus.dart b/lib/corpus.dart index 62fcf01..fb80422 100644 --- a/lib/corpus.dart +++ b/lib/corpus.dart @@ -1,6 +1,7 @@ import 'package:d4rt/d4rt.dart'; import 'package:collection/collection.dart'; import 'package:d4rt_formulas/d4rt_formulas.dart'; +import 'formula_models.dart'; class Multimap extends DelegatingMap> { final Map> _map; @@ -182,7 +183,7 @@ class Corpus{ /// Loads formula elements, making sure to load units first, then formulas /// to avoid dependency issues. - void loadFormulaElements(List elements) { + void loadFormulaElements(List elements) { List units = []; List formulas = []; diff --git a/lib/defaults/default_corpus.dart b/lib/defaults/default_corpus.dart index 40f75ec..e9801e3 100644 --- a/lib/defaults/default_corpus.dart +++ b/lib/defaults/default_corpus.dart @@ -39,7 +39,8 @@ Future createDefaultCorpus() async{ print( "Loading units from $unitRes"); final literal = await loadResourceAsString(unitRes); final units = UnitSpec.fromArrayStringLiteral(literal); - corpus.loadFormulaElements(units); + final formulaElements = units.cast(); + corpus.loadFormulaElements(formulaElements); } } @@ -49,7 +50,8 @@ Future createDefaultCorpus() async{ for (final formRes in formulaResources) { final literal = await loadResourceAsString(formRes); final formulas = Formula.fromArrayStringLiteral(literal); - corpus.loadFormulaElements(formulas); + final formulaElements = formulas.cast(); + corpus.loadFormulaElements(formulaElements); } } diff --git a/lib/formula_models.dart b/lib/formula_models.dart index 34b7499..ede7ca5 100644 --- a/lib/formula_models.dart +++ b/lib/formula_models.dart @@ -38,21 +38,21 @@ List parseD4rtLiteral(String arrayStringLiteral) { /// Parses corpus elements from an array string literal. /// Determines if each element is a formula or a unit and converts accordingly. -List parseCorpusElements(String arrayStringLiteral) { +List parseCorpusElements(String arrayStringLiteral) { final List elements = parseD4rtLiteral(arrayStringLiteral); - - final List result = []; + + final List result = []; for (final element in elements) { if (element is Map) { // Check if it's a formula by looking for required formula properties // Formulas typically have 'd4rtCode' and 'input'/'output' properties if (element.containsKey('d4rtCode')) { result.add(Formula.fromSet(element)); - } + } // Units typically have 'name', 'symbol', and 'baseUnit' properties else if (element.containsKey('name') && element.containsKey('symbol')) { result.add(UnitSpec.fromSet(element)); - } + } else { throw ArgumentError('Unknown element type: $element'); } @@ -60,14 +60,16 @@ List parseCorpusElements(String arrayStringLiteral) { throw ArgumentError('Element must be a Map: $element'); } } - + return result; } typedef Number = double; +/// Abstract base class for formula elements +abstract class FormulaElement {} -class UnitSpec { +class UnitSpec extends FormulaElement { final String name; final String baseUnit; final String symbol; @@ -217,7 +219,7 @@ class VariableSpec { } } -class Formula { +class Formula extends FormulaElement { final String name; final String? description; final List input;