mirror of
https://github.com/dancojocaru2000/logic-circuits-simulator.git
synced 2025-02-22 09:09:35 +02:00
Fixed simulation and dependency resolution bugs
This commit is contained in:
parent
6e2dda60e2
commit
b34e65544b
2 changed files with 28 additions and 10 deletions
|
@ -37,7 +37,7 @@ class ComponentState extends ChangeNotifier {
|
||||||
await state.setCurrentComponent(
|
await state.setCurrentComponent(
|
||||||
project: proj,
|
project: proj,
|
||||||
component: comp,
|
component: comp,
|
||||||
onDependencyNeeded: (projId, compId) async => _dependenciesMap['$projId/$compId'],
|
onDependencyNeeded: (projId, compId) async => _dependenciesMap['${projId == "self" ? proj.projectId : projId}/$compId'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return SimulatedComponent(
|
return SimulatedComponent(
|
||||||
|
@ -108,14 +108,30 @@ class ComponentState extends ChangeNotifier {
|
||||||
|
|
||||||
// Load dependencies
|
// Load dependencies
|
||||||
final unsatisfiedDependencies = <String>[];
|
final unsatisfiedDependencies = <String>[];
|
||||||
for (final depId in component.dependencies) {
|
final neededDependencies = component.dependencies.toList();
|
||||||
final splitted = depId.split('/');
|
while (neededDependencies.isNotEmpty) {
|
||||||
final maybeDep = await onDependencyNeeded(splitted[0], splitted[1]);
|
final tmp = neededDependencies.toList();
|
||||||
if (maybeDep == null) {
|
neededDependencies.clear();
|
||||||
unsatisfiedDependencies.add(depId);
|
for (final depId in tmp) {
|
||||||
}
|
if (!hasDependency(depId)) {
|
||||||
else {
|
final splitted = depId.split('/');
|
||||||
addDependency(depId, maybeDep);
|
final maybeDep = await onDependencyNeeded(splitted[0], splitted[1]);
|
||||||
|
if (maybeDep == null) {
|
||||||
|
unsatisfiedDependencies.add(depId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
addDependency(depId, maybeDep);
|
||||||
|
neededDependencies.addAll(
|
||||||
|
maybeDep.item2.dependencies
|
||||||
|
.map((depId) {
|
||||||
|
final splitted = depId.split('/');
|
||||||
|
final projectId = splitted[0] == 'self' ? maybeDep.item1.projectId : splitted[0];
|
||||||
|
return '$projectId/${splitted[1]}';
|
||||||
|
})
|
||||||
|
.where((depId) => !hasDependency(depId))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (unsatisfiedDependencies.isNotEmpty) {
|
if (unsatisfiedDependencies.isNotEmpty) {
|
||||||
|
|
|
@ -24,7 +24,9 @@ class SimulatedComponent {
|
||||||
String instanceId, String? depId) async {
|
String instanceId, String? depId) async {
|
||||||
if (!_instances.containsKey(instanceId)) {
|
if (!_instances.containsKey(instanceId)) {
|
||||||
if (depId != null) {
|
if (depId != null) {
|
||||||
_instances[instanceId] = await onRequiredDependency(depId);
|
final splitted = depId.split('/');
|
||||||
|
final projectId = splitted[0] == 'self' ? project.projectId : splitted[0];
|
||||||
|
_instances[instanceId] = await onRequiredDependency('$projectId/${splitted[1]}');
|
||||||
} else {
|
} else {
|
||||||
throw Exception('Attempted to get instance of unknown component');
|
throw Exception('Attempted to get instance of unknown component');
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue