add comments

This commit is contained in:
Hedden, Kyle Matthew 2023-09-13 20:36:59 -04:00
parent caf995c0b0
commit 6758aed034
2 changed files with 6 additions and 2 deletions

View File

@ -12,14 +12,16 @@ public protocol ParentModelProtocol: MoleculeTreeTraversalProtocol, AnyObject {
var children: [MoleculeModelProtocol] { get }
/// Method for replacing surface level children. (Does not recurse.)
func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool
}
public extension ParentModelProtocol {
/// Top level test to replace child molecules. Each parent molecule should attempt to replace.
func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool { return false }
/// Helper function for replacing molecules.
/// Helper function for replacing a single molecules with type and optionality checks.
func replaceChildMolecule<T>(at childMolecule: inout T, with replacementMolecule: MoleculeModelProtocol) throws -> Bool {
guard let childIdMolecule = childMolecule as? MoleculeModelProtocol else { return false }
if childIdMolecule.id == replacementMolecule.id {
@ -32,6 +34,7 @@ public extension ParentModelProtocol {
return false
}
/// Helper for replacing a molecule in place within an array. Note the "in".
func replaceChildMolecule<T>(in molecules: inout [T], with replacementMolecule: MoleculeModelProtocol) throws -> Bool {
guard let moleculeIdModels = molecules as? [MoleculeModelProtocol], let matchingIndex = moleculeIdModels.firstIndex(where: {
$0.id == replacementMolecule.id

View File

@ -38,9 +38,10 @@ public extension TemplateModelProtocol {
return rootMolecules.depthFirstTraverse(options: options, depth: depth, onVisit: onVisit)
}
/// Recursively finds and replaces the first child matching the replacement molecule id property.
func replaceMolecule(with replacementMolecule: MoleculeModelProtocol) throws -> Bool {
// Attempt root level replacement on the template model first.
if try self.replaceChildMolecule(with: replacementMolecule) {
if try replaceChildMolecule(with: replacementMolecule) {
return true
}