public void ChangePins() { TypesAndFields.Clear(); string def = ""; if (FDefinition[0] != null) { def = FDefinition[0]; } string[] tempfields = def.Trim().Split(','); int order = 100; List <string> fieldnames = new List <string>(); foreach (string field in tempfields) { string[] typefieldpair = field.Trim().Split(' '); if (typefieldpair.Length == 2) { typefieldpair[0] = typefieldpair[0].Trim(); typefieldpair[0] = typefieldpair[0].ToLower(); typefieldpair[1] = typefieldpair[1].Trim(); if (IdentityType.Instance.ContainsKey(typefieldpair[0]) && (!fieldnames.Contains(typefieldpair[1].ToLower()))) { fieldnames.Add(typefieldpair[1].ToLower()); TypesAndFields.Add(typefieldpair); if (!Spreads.ContainsKey(typefieldpair[1])) { Type currtype = IdentityType.Instance[typefieldpair[0]]; Type pinType = typeof(ISpread <>).MakeGenericType((typeof(ISpread <>)).MakeGenericType(currtype)); IIOContainer currpin = FIOFactory.CreateIOContainer(pinType, PinAttribute(typefieldpair[1], order)); NGISpread currspread = currpin.ToISpread(); Spreads.Add(typefieldpair[1], currspread); Pins.Add(typefieldpair[1], currpin); } } } order++; } List <string> Removable = new List <string>(); foreach (string k in Spreads.Keys) { if (!fieldnames.Contains(k.ToLower())) { Removable.Add(k); } } foreach (string k in Removable) { Spreads.Remove(k); Pins[k].Dispose(); Pins.Remove(k); } }
public void Destroy(DX11RenderContext context, bool force) { var pin = FValue.ToISpread() as ISpread <ISpread <DX11Resource <IDX11Resource> > >; if (pin == null) { return; } for (int i = 0; i < pin.SliceCount; i++) { for (int j = 0; j < pin[i].SliceCount; j++) { pin[i][j].Dispose(context); } } }
public override void Evaluate(int SpreadMax) { InitDX11Graph(); #region early break if ( !FInput.IsChanged && !FConfig.IsChanged && !FKey.IsChanged && !FAvoidNil.ToISpread().IsChanged && !FAvoidNilEnable.IsChanged && !FSwapDim.IsChanged ) { return; } SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount; if (SpreadMax == 0) { if (!FAvoidNilEnable.IsAnyInvalid() && FAvoidNilEnable[0]) { var force = FAvoidNil.ToISpread().IsChanged || FAvoidNilEnable.IsChanged; if (force || FOutput.SliceCount > 0) // zero inputs -> zero outputs. { FOutput.FlushNil(); // set a default FBinSize.SliceCount = 1; FBinSize[0] = 1; FBinSize.Flush(); FValue.ToISpread().SliceCount = 1; var output = (FValue.ToISpread())[0] as ISpread; var dummies = GetDefaults(FAvoidNil.ToISpread(), 0).ToList(); output.SliceCount = dummies.Count; for (int j = 0; j < dummies.Count; j++) { output[j] = dummies[j]; } FValue.ToISpread().Flush(); return; } else { return; // already defaulted } } else { var force = !FAvoidNilEnable.IsAnyInvalid() && !FAvoidNilEnable[0] && FAvoidNilEnable.IsChanged; if (force || FOutput.SliceCount > 0) // zero inputs -> zero outputs. { FOutput.FlushNil(); FBinSize.SliceCount = 1; FBinSize[0] = 0; FBinSize.Flush(); FValue.ToISpread().FlushNil(); return; } else { return; // already zero'ed } } } #endregion early break FOutput.FlushResult(FInput); var keyCount = FKey.SliceCount; FBinSize.SliceCount = SpreadMax; var binnedOutput = FValue.ToISpread(); binnedOutput.SliceCount = SpreadMax * keyCount; if (!FSwapDim.IsAnyInvalid() && FSwapDim[0]) // fields first { for (int i = 0; i < keyCount; i++) { var fieldName = FKey[i]; var count = 0; var index = 0; foreach (var message in FInput) { var output = (binnedOutput[i * keyCount + index] as ISpread); SetData(message, index, fieldName, output); count += output.SliceCount; index++; } FBinSize[i] = count; } } else // messages first { for (int i = 0; i < SpreadMax; i++) { Message message = FInput[i]; var count = 0; var index = 0; foreach (var fieldName in FKey) { var output = (binnedOutput[i * keyCount + index] as ISpread); SetData(message, index, fieldName, output); count += output.SliceCount; index++; } FBinSize[i] = count; } } binnedOutput.Flush(); FBinSize.Flush(); }