public void populateAvail(sharptest.ModLibrary library) { if (library == null) { throw new ArgumentNullException("library"); } if (this.explicitAvail) { return; } availObjects = new List <signals.ICircuitConnectible>(); switch (this.type) { case ElementType.Module: List <List <signals.IBlockDriver> > blocks = library.block(this.name); if (blocks != null) { foreach (List <signals.IBlockDriver> variant in blocks) { foreach (signals.IBlockDriver driver in variant) { if (driver.canCreate) { this.availObjects.Add(driver); } if (driver.canDiscover) { signals.IBlock[] found = driver.Discover(); foreach (signals.IBlock discBlk in found) { if (this.nodeId == null || String.Compare(discBlk.NodeId, this.nodeId, true) == 0) { this.availObjects.Add(discBlk); } } } } } } break; case ElementType.Function: case ElementType.FunctionOnIn: case ElementType.FunctionOnOut: List <signals.IFunctionSpec> funcs = library.func(this.name); if (funcs != null) { foreach (signals.IFunctionSpec spec in funcs) { this.availObjects.Add(spec); } } break; } }
private static signals.IFunctionSpec findImplicitConversion(sharptest.ModLibrary library, signals.EType inpType, signals.EType outType) { List <signals.IFunctionSpec> idents = library.func("="); if (idents == null) { return(null); } foreach (signals.IFunctionSpec avail in idents) { signals.EType identInput = avail.Fingerprint.inputs[0]; signals.EType identOutput = avail.Fingerprint.outputs[0]; if (inpType == identInput && outType == identOutput) { return(avail); } } return(null); }