protected void ReadToVal(int parameterIndex = 0) { var attributeType = DeltaCore.GetAttributeType(typeArgs[parameterIndex]); if (attributeType == typeof(ResourceTypeAttribute)) { sb += $"var guid = buf.ReadGuid();"; sb += $"var p{parameterIndex} = {typeof(DeltaCore).Name}.Get<{typeArgs[parameterIndex]}>(guid);"; } else if (attributeType == typeof(SimpleTypeAttribute)) { sb += $"var p{parameterIndex} = buf.Read{capitalizedTypeArgs[parameterIndex]}();"; } else { sb += $"var p{parameterIndex} = ({capitalizedTypeArgs[parameterIndex]})buf.ReadNode(node);"; } }
public NodeBindings(Type type) { this.type = type; var syncFields = new List <FieldBindings>(); var fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); foreach (var fieldInfo in fieldInfos) { var fieldType = fieldInfo.FieldType; if (!fieldType.IsGenericType) { continue; } var genericType = fieldInfo.FieldType.GetGenericTypeDefinition(); if (DeltaCore.GetAttributeType(genericType.Name) == typeof(SyncTypeAttribute)) { var fieldID = syncFields.Count; var metaField = new FieldBindings(type, fieldInfo, fieldID); syncFields.Add(metaField); } fields = ImmutableArray.CreateRange(syncFields); } construct = (Func <NodeBindings, Node>)Delegate.CreateDelegate(typeof(Func <NodeBindings, Node>), type, "Construct", false, false); if (construct == null) { throw new ArgumentException($"Failed to bind {nameof(Construct)} delegate for {type}"); } Destruct = (Action <Node>)Delegate.CreateDelegate(typeof(Action <Node>), type, "Destruct", false, false); if (Destruct == null) { throw new ArgumentException($"Failed to bind {nameof(Destruct)} delegate for {type}"); } }