示例#1
0
        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);";
            }
        }
示例#2
0
        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}");
            }
        }