Exemple #1
0
 protected void ReadCachedMemberValue(MemberInfo member, int i, MemberValueCache valueCache)
 {
     if (IsMemberDictionary[member])
     {
         var keyspread = (ISpread)Pd.OutputPins[member.Name + " Keys"][i];
         keyspread.SliceCount = valueCache.Keys.Length;
         for (int j = 0; j < valueCache.Keys.Length; j++)
         {
             keyspread[j] = valueCache.Keys[j];
         }
         var valspread = (ISpread)Pd.OutputPins[member.Name + " Values"][i];
         valspread.SliceCount = valueCache.Collection.Length;
         for (int j = 0; j < valueCache.Collection.Length; j++)
         {
             valspread[j] = valueCache.Collection[j];
         }
     }
     else if (IsMemberEnumerable[member])
     {
         var valspread = (ISpread)Pd.OutputPins[member.Name][i];
         valspread.SliceCount = valueCache.Collection.Length;
         for (int j = 0; j < valueCache.Collection.Length; j++)
         {
             valspread[j] = valueCache.Collection[j];
         }
     }
     else
     {
         Pd.OutputPins[member.Name][i] = valueCache.Value;
     }
 }
Exemple #2
0
        public CQ_Value MemberValueGet(CQ_Content content, object object_this, string valuename)
        {
            MemberValueCache c = null;

            if (!memberValueGetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValueGetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("get_" + valuename);
                    if (c.minfo == null)
                    {
                        c.einfo = type.GetEvent(valuename);
                        if (c.einfo == null)
                        {
                            c.type = -1;
                            return(CQ_Value.Null);
                        }
                        else
                        {
                            c.type = 3;
                        }
                    }
                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0)
            {
                return(CQ_Value.Null);
            }
            CQ_Value v = new CQ_Value();

            switch (c.type)
            {
            case 1:
                v.SetObject(c.finfo.FieldType, c.finfo.GetValue(object_this));
                break;

            case 2:
                v.SetObject(c.minfo.ReturnType, c.minfo.Invoke(object_this, null));
                break;

            case 3:
                v.SetObject(c.einfo.EventHandlerType, new DeleEvent(object_this, c.einfo));
                break;
            }
            return(v);
        }
        public virtual bool MemberValueSet(CLS_Content content, object object_this, string valuename, object value)
        {
            MemberValueCache c;

            if (!memberValuesetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValuesetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("set_" + valuename);
                    if (c.minfo == null)
                    {
                        c.type = -1;
                        return false;
                    }
                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0)
                return false;

            if (c.type == 1)
            {
                if (value != null && value.GetType() != c.finfo.FieldType)
                {

                    value = content.environment.GetType(value.GetType()).ConvertTo(content, value, c.finfo.FieldType);
                }
                c.finfo.SetValue(object_this, value);
            }
            else
            {
                var ptype = c.minfo.GetParameters()[0].ParameterType;
                if (value != null && value.GetType() != ptype)
                {

                    value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype);
                }
                c.minfo.Invoke(object_this, new object[] { value });
            }
            return true;
            ////先操作File
            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    if (value != null && value.GetType() != targetf.FieldType)
            //    {

            //        value = content.environment.GetType(value.GetType()).ConvertTo(content, value, targetf.FieldType);
            //    }
            //    targetf.SetValue(object_this, value);
            //    return;
            //}
            //else
            //{
            //    var methodf = type.GetMethod("set_" + valuename);
            //    if (methodf != null)
            //    {
            //        var ptype = methodf.GetParameters()[0].ParameterType;
            //        if (value != null && value.GetType() != ptype)
            //        {

            //            value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype);
            //        }
            //        methodf.Invoke(object_this, new object[] { value });

            //        return;
            //    }
            //}



            //throw new NotImplementedException();
        }
        public virtual CLS_Content.Value MemberValueGet(CLS_Content environment, object object_this, string valuename)
        {

            MemberValueCache c;

            if (!memberValuegetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValuegetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("get_" + valuename);
                    if (c.minfo == null)
                    {
                        c.einfo = type.GetEvent(valuename);
                        if (c.einfo == null)
                        {
                            c.type = -1;
                            return null;
                        }
                        else
                        {
                            c.type = 3;
                        }
                    }
                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0) return null;
            CLS_Content.Value v = new CLS_Content.Value();
            switch (c.type)
            {
                case 1:

                    v.value = c.finfo.GetValue(object_this);
                    v.type = c.finfo.FieldType;
                    break;
                case 2:

                    v.value = c.minfo.Invoke(object_this, null);
                    v.type = c.minfo.ReturnType;
                    break;
                case 3:
                    v.value = new DeleEvent(object_this, c.einfo);
                    v.type = c.einfo.EventHandlerType;
                    break;

            }
            return v;

            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetf.GetValue(object_this);
            //    v.type = targetf.FieldType;
            //    return v;
            //}

            //var targetp = type.GetProperty(valuename);
            //if (targetp != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetp.GetValue(object_this, null);
            //    v.type = targetp.PropertyType;
            //    return v;
            //}
            //else
            //{//用get set 方法替代属性操作,AOT环境属性操作有问题
            //    var methodf = type.GetMethod("get_" + valuename);
            //    if (methodf != null)
            //    {
            //        CLS_Content.Value v = new CLS_Content.Value();
            //        v.value = methodf.Invoke(object_this, null);
            //        v.type = methodf.ReturnType;
            //        return v;
            //    }
            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetf.GetValue(object_this);
            //    v.type = targetf.FieldType;
            //    return v;
            //}
            //    else
            //    {
            //        System.Reflection.EventInfo targete = type.GetEvent(valuename);
            //        if (targete != null)
            //        {
            //            CLS_Content.Value v = new CLS_Content.Value();
            //            v.value = new DeleEvent(object_this, targete);
            //            v.type = targete.EventHandlerType;
            //            return v;
            //        }
            //    }
            //}

            //return null;
        }
Exemple #5
0
        public virtual bool MemberValueSet(CLS_Content content, object object_this, string valuename, object value)
        {
            MemberValueCache c;

            if (!memberValuesetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValuesetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("set_" + valuename);
                    if (c.minfo == null)
                    {
                        c.type = -1;
                        return(false);
                    }
                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0)
            {
                return(false);
            }

            if (c.type == 1)
            {
                if (value != null && value.GetType() != c.finfo.FieldType)
                {
                    value = content.environment.GetType(value.GetType()).ConvertTo(content, value, c.finfo.FieldType);
                }
                c.finfo.SetValue(object_this, value);
            }
            else
            {
                var ptype = c.minfo.GetParameters()[0].ParameterType;
                if (value != null && value.GetType() != ptype)
                {
                    value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype);
                }
                c.minfo.Invoke(object_this, new object[] { value });
            }
            return(true);
            ////先操作File
            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    if (value != null && value.GetType() != targetf.FieldType)
            //    {

            //        value = content.environment.GetType(value.GetType()).ConvertTo(content, value, targetf.FieldType);
            //    }
            //    targetf.SetValue(object_this, value);
            //    return;
            //}
            //else
            //{
            //    var methodf = type.GetMethod("set_" + valuename);
            //    if (methodf != null)
            //    {
            //        var ptype = methodf.GetParameters()[0].ParameterType;
            //        if (value != null && value.GetType() != ptype)
            //        {

            //            value = content.environment.GetType(value.GetType()).ConvertTo(content, value, ptype);
            //        }
            //        methodf.Invoke(object_this, new object[] { value });

            //        return;
            //    }
            //}



            //throw new NotImplementedException();
        }
Exemple #6
0
        public virtual CLS_Content.Value MemberValueGet(CLS_Content environment, object object_this, string valuename)
        {
            MemberValueCache c;

            if (!memberValuegetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValuegetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("get_" + valuename);
                    if (c.minfo == null)
                    {
                        c.einfo = type.GetEvent(valuename);
                        if (c.einfo == null)
                        {
                            c.type = -1;
                            return(null);
                        }
                        else
                        {
                            c.type = 3;
                        }
                    }
                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0)
            {
                return(null);
            }
            CLS_Content.Value v = new CLS_Content.Value();
            switch (c.type)
            {
            case 1:

                v.value = c.finfo.GetValue(object_this);
                v.type  = c.finfo.FieldType;
                break;

            case 2:

                v.value = c.minfo.Invoke(object_this, null);
                v.type  = c.minfo.ReturnType;
                break;

            case 3:
                v.value = new DeleEvent(object_this, c.einfo);
                v.type  = c.einfo.EventHandlerType;
                break;
            }
            return(v);

            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetf.GetValue(object_this);
            //    v.type = targetf.FieldType;
            //    return v;
            //}

            //var targetp = type.GetProperty(valuename);
            //if (targetp != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetp.GetValue(object_this, null);
            //    v.type = targetp.PropertyType;
            //    return v;
            //}
            //else
            //{//用get set 方法替代属性操作,AOT环境属性操作有问题
            //    var methodf = type.GetMethod("get_" + valuename);
            //    if (methodf != null)
            //    {
            //        CLS_Content.Value v = new CLS_Content.Value();
            //        v.value = methodf.Invoke(object_this, null);
            //        v.type = methodf.ReturnType;
            //        return v;
            //    }
            //var targetf = type.GetField(valuename);
            //if (targetf != null)
            //{
            //    CLS_Content.Value v = new CLS_Content.Value();
            //    v.value = targetf.GetValue(object_this);
            //    v.type = targetf.FieldType;
            //    return v;
            //}
            //    else
            //    {
            //        System.Reflection.EventInfo targete = type.GetEvent(valuename);
            //        if (targete != null)
            //        {
            //            CLS_Content.Value v = new CLS_Content.Value();
            //            v.value = new DeleEvent(object_this, targete);
            //            v.type = targete.EventHandlerType;
            //            return v;
            //        }
            //    }
            //}

            //return null;
        }
Exemple #7
0
        protected void AssignMemberValue(MemberInfo member, object input, int i, MemberValueCache valueCache)
        {
            var memberValue = valueCache?.Getter(input) ?? GetMemberValue(member, input);

            if (IsMemberDictionary[member])
            {
                var keyspread   = (ISpread)Pd.OutputPins[member.Name + " Keys"][i];
                var valuespread = (ISpread)Pd.OutputPins[member.Name + " Values"][i];
                keyspread.SliceCount = valuespread.SliceCount = 0;

                if (memberValue == null)
                {
                    return;
                }
                var dict = (IDictionary)memberValue;

                foreach (var k in dict.Keys)
                {
                    keyspread.SliceCount++;
                    keyspread[-1] = TransformOutput(k, member, i);
                }
                foreach (var v in dict.Values)
                {
                    valuespread.SliceCount++;
                    valuespread[-1] = TransformOutput(v, member, i);
                }
                if (valueCache != null)
                {
                    valueCache.Collection = valuespread.ToObjectArray(valueCache.Collection);
                    valueCache.Keys       = keyspread.ToObjectArray(valueCache.Keys);
                }
            }
            else if (IsMemberEnumerable[member])
            {
                var spread = (ISpread)Pd.OutputPins[member.Name][i];
                spread.SliceCount = 0;

                if (memberValue == null)
                {
                    return;
                }
                var enumerable = (IEnumerable)memberValue;

                foreach (var o in enumerable)
                {
                    spread.SliceCount++;
                    spread[-1] = TransformOutput(o, member, i);
                }

                if (valueCache != null)
                {
                    valueCache.Collection = spread.ToObjectArray(valueCache.Collection);
                }
            }
            else
            {
                var val = TransformOutput(memberValue, member, i);
                Pd.OutputPins[member.Name][i] = val;

                if (valueCache != null)
                {
                    valueCache.Value = val;
                }
            }
        }
Exemple #8
0
        public bool MemberValueSet(CQ_Content content, object object_this, string valuename, CQ_Value value)
        {
            MemberValueCache c;

            if (!memberValueSetCaches.TryGetValue(valuename, out c))
            {
                c = new MemberValueCache();
                memberValueSetCaches[valuename] = c;
                c.finfo = type.GetField(valuename);
                if (c.finfo == null)
                {
                    c.minfo = type.GetMethod("set_" + valuename);
                    //                    var mss = type.GetMethods();
                    if (c.minfo == null)
                    {
                        if (type.GetMethod("add_" + valuename) != null)
                        {
                            c.type = 3;//event;
                        }
                        else
                        {
                            c.type = -1;
                            return(false);
                        }
                    }

                    else
                    {
                        c.type = 2;
                    }
                }
                else
                {
                    c.type = 1;
                }
            }

            if (c.type < 0)
            {
                return(false);
            }

            object obj = value.GetObject();

            if (c.type == 1)
            {
                if (obj != null && obj.GetType() != c.finfo.FieldType)
                {
                    obj = CQuark.AppDomain.ConvertTo(obj, c.finfo.FieldType);
                }
                c.finfo.SetValue(object_this, obj);
            }
            else if (c.type == 2)
            {
                var ptype = c.minfo.GetParameters()[0].ParameterType;
                if (obj != null && obj.GetType() != ptype)
                {
                    obj = CQuark.AppDomain.ConvertTo(obj, ptype);
                }
                c.minfo.Invoke(object_this, new object[] { obj });
            }
            return(true);
        }