Example #1
0
 public EmitStoreField(FieldInfo field, IEmitterType targetObject, IEmitterType value)
 {
     _field        = field;
     _targetObject = targetObject;
     _value        = value;
     ObjectType    = _field.FieldType;
 }
Example #2
0
        public CodeGenerator EmitCall(MethodInfo method, IEmitterType invocationObject, params IEmitterType[] arguments)
        {
            ParameterInfo[] actualArguments = method.GetParameters();
            if (arguments.IsNull())
            {
                arguments = new IEmitterType[0];
            }
            if (arguments.Length != actualArguments.Length)
            {
                throw new ArgumentException();
            }

            if (invocationObject.IsNotNull())
            {
                invocationObject.Emit(this);
            }

            for (var i = 0; i < arguments.Length; i++)
            {
                arguments[i].Emit(this);
                CastType(arguments[i].ObjectType, actualArguments[i].ParameterType);
            }
            EmitCall(method);
            return(this);
        }
        internal void Initialize()
        {
            if (info.Attachments.Count > 0)
            {
                for (int i = 0; i < info.Attachments.Count; i++)
                {
                    object obj = AssemblyManager.CreateInstance(info.Attachments[i]);

                    if (obj != null)
                    {
                        attachments.Add(obj as IAttachment);
                        updateAttachments.Add(obj as IUpdate);
                    }
                }
            }

            if (info.CycleType != null)
            {
                object obj = AssemblyManager.CreateInstance(info.CycleType);

                if (obj != null)
                {
                    updateAttachments.Add(obj as IUpdate);

                    spawnCycle             = obj as Cycle;
                    spawnCycle.OnSpawn    += new OnSpawnEvent(GenerateParticles);
                    spawnCycle.OnComplete += new OnSpawnCompleteEvent(SpawningComplete);
                }
            }

            if (info.EmitterType != null)
            {
                object obj = AssemblyManager.CreateInstance(info.EmitterType);

                if (obj != null)
                {
                    if (obj is IUpdate)
                    {
                        updateAttachments.Add(obj as IUpdate);
                    }

                    emitter = obj as IEmitterType;
                }
            }

            if (info.ParticleRenderType != null)
            {
                object obj = AssemblyManager.CreateInstance(info.ParticleRenderType);

                if (obj != null)
                {
                    if (obj is IUpdate)
                    {
                        updateAttachments.Add(obj as IUpdate);
                    }

                    particleType = obj as IParticleType;
                }
            }
        }
Example #4
0
 public EmitterCallMethod(MethodInfo method, IEmitterType invocationObject, params IEmitterType[] arguments)
 {
     _method = method;
     _invocationObject = invocationObject;
     _arguments = arguments;
     ObjectType = _method.ReturnType;
 }
Example #5
0
            public EmitStoreProperty(PropertyInfo property, IEmitterType targetObject, IEmitterType value)
            {
                MethodInfo method = property.GetSetMethod();

                _callMethod = EmitMethod.Call(method, targetObject, value);
                ObjectType  = _callMethod.ObjectType;
            }
        public CodeGenerator EmitCall(MethodInfo method, IEmitterType invocationObject, params IEmitterType[] arguments)
        {
            ParameterInfo[] actualArguments = method.GetParameters();
            if (arguments.IsNull())
            {
                arguments = new IEmitterType[0];
            }
            if (arguments.Length != actualArguments.Length)
            {
                throw new ArgumentException();
            }

            if (invocationObject.IsNotNull())
            {
                invocationObject.Emit(this);
            }

            for (var i = 0; i < arguments.Length; i++)
            {
                arguments[i].Emit(this);
                CastType(arguments[i].ObjectType, actualArguments[i].ParameterType);
            }
            EmitCall(method);
            return this;
        }
Example #7
0
        private IEmitter Build(TypePair parentTypePair, MappingMemberPath memberPath)
        {
            if (memberPath.OneLevelTarget)
            {
                var sourceObject = EmitArgument.Load(memberPath.TypePair.Source, 1);
                var targetObject = EmitArgument.Load(memberPath.TypePair.Target, 2);

                var sourceMember = LoadMember(memberPath.Source, sourceObject, memberPath.Source.Count);
                var targetMember = LoadMember(memberPath.Target, targetObject, memberPath.Target.Count);

                IEmitterType convertedMember = ConvertMember(parentTypePair, memberPath.Tail, sourceMember, targetMember);

                IEmitter result = StoreTargetObjectMember(memberPath.Tail, targetObject, convertedMember);
                return(result);
            }
            else
            {
                var targetObject = EmitArgument.Load(memberPath.Head.TypePair.Target, 2);
                var targetMember = LoadMember(memberPath.Target, targetObject, memberPath.Target.Count - 1);

                var sourceObject = EmitArgument.Load(memberPath.Head.TypePair.Source, 1);
                var sourceMember = LoadMember(memberPath.Source, sourceObject, memberPath.Source.Count);

                IEmitterType convertedMember = ConvertMember(parentTypePair, memberPath.Tail, sourceMember, targetMember);

                IEmitter result = StoreTargetObjectMember(memberPath.Tail, targetMember, convertedMember);
                return(result);
            }
        }
Example #8
0
 public EmitStoreField(FieldInfo field, IEmitterType targetObject, IEmitterType value)
 {
     _field = field;
     _targetObject = targetObject;
     _value = value;
     ObjectType = _field.FieldType;
 }
Example #9
0
 public EmitterCallMethod(MethodInfo method, IEmitterType invocationObject, params IEmitterType[] arguments)
 {
     _method           = method;
     _invocationObject = invocationObject;
     _arguments        = arguments;
     ObjectType        = _method.ReturnType;
 }
Example #10
0
 public Emitter(Texture2D texture, EmitterParticleState particleState, IEmitterType emitterType, int nbParticleEmittedPerUpdate, int maxParticles)
     : base(texture)
 {
     _emitterParticleState       = particleState;
     _emitterType                = emitterType;
     _nbParticleEmittedPerUpdate = nbParticleEmittedPerUpdate;
     _maxNbParticle              = maxParticles;
 }
Example #11
0
 public Emitter(Texture2D texture, Vector2 position, EmitterParticleState particleState, IEmitterType emitterType, int nbParticleEmittedPerUpdate, int maxParticles)
 {
     _emitterParticleState = particleState;
     _emitterType          = emitterType;
     _texture = texture;
     _nbParticleEmittedPerUpdate = nbParticleEmittedPerUpdate;
     _maxNbParticle = maxParticles;
     Position       = position;
 }
Example #12
0
 private static IEmitterType StoreTargetObjectMember(MappingMember member, IEmitterType targetObject, IEmitterType convertedMember)
 {
     IEmitterType result = null;
     member.Target
           .ToOption()
           .Match(x => x.IsField(), x => result = StoreFiled((FieldInfo)x, targetObject, convertedMember))
           .Match(x => x.IsProperty(), x => result = StoreProperty((PropertyInfo)x, targetObject, convertedMember));
     return result;
 }
        private static void EmitCreateTargetInstance(Type targetType, TypeBuilder typeBuilder)
        {
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(CreateTargetInstanceMethod, OverrideProtected, targetType, Type.EmptyTypes);
            var           codeGenerator = new CodeGenerator(methodBuilder.GetILGenerator());

            IEmitterType result = targetType.IsValueType ? EmitValueType(targetType, codeGenerator) : EmitRefType(targetType);

            EmitReturn.Return(result, targetType).Emit(codeGenerator);
        }
Example #14
0
        private IEmitterType LoadMember(MemberInfo member, IEmitterType sourceObject)
        {
            IEmitterType result = null;

            member.ToOption()
            .Match(x => x.IsField(), x => result    = LoadField(sourceObject, (FieldInfo)x))
            .Match(x => x.IsProperty(), x => result = LoadProperty(sourceObject, (PropertyInfo)x));
            return(result);
        }
 public IEmitterType EmitMapMethod(IEmitterType sourceMemeber, IEmitterType targetMember)
 {
     Type mapperType = typeof(Mapper);
     MethodInfo mapMethod = mapperType.GetMethod(Mapper.MapMethodName, BindingFlags.Instance | BindingFlags.Public);
     FieldInfo mappersField = mapperType.GetField(Mapper.MappersFieldName, BindingFlags.Instance | BindingFlags.NonPublic);
     IEmitterType mappers = EmitField.Load(EmitThis.Load(mapperType), mappersField);
     IEmitterType mapper = EmitArray.Load(mappers, Id);
     IEmitterType result = EmitMethod.Call(mapMethod, mapper, sourceMemeber, targetMember);
     return result;
 }
Example #16
0
        private static IEmitterType StoreTargetObjectMember(MappingMember member, IEmitterType targetObject, IEmitterType convertedMember)
        {
            IEmitterType result = null;

            member.Target
            .ToOption()
            .Match(x => x.IsField(), x => result    = StoreFiled((FieldInfo)x, targetObject, convertedMember))
            .Match(x => x.IsProperty(), x => result = StoreProperty((PropertyInfo)x, targetObject, convertedMember));
            return(result);
        }
Example #17
0
        public IEmitterType EmitMapMethod(IEmitterType sourceMemeber, IEmitterType targetMember)
        {
            Type         mapperType   = typeof(Mapper);
            MethodInfo   mapMethod    = mapperType.GetMethod(Mapper.MapMethodName, BindingFlags.Instance | BindingFlags.Public);
            FieldInfo    mappersField = mapperType.GetField(Mapper.MappersFieldName, BindingFlags.Instance | BindingFlags.NonPublic);
            IEmitterType mappers      = EmitField.Load(EmitThis.Load(mapperType), mappersField);
            IEmitterType mapper       = EmitArray.Load(mappers, Id);
            IEmitterType result       = EmitMethod.Call(mapMethod, mapper, sourceMemeber, targetMember);

            return(result);
        }
        public IEmitterType EmitMapMethod(IEmitterType sourceMember, IEmitterType targetMember)
        {
            var mapperType   = typeof(Mapper);
            var mapMethod    = mapperType.GetMethod(Mapper.MAP_METHOD_NAME, BindingFlags.Instance | BindingFlags.Public);
            var mappersField = mapperType.GetField(Mapper.MAPPERS_FIELD_NAME, BindingFlags.Instance | BindingFlags.NonPublic);
            var mappers      = EmitField.Load(EmitThis.Load(mapperType), mappersField);
            var mapper       = EmitArray.Load(mappers, Id);
            var result       = EmitMethod.Call(mapMethod, mapper, sourceMember, targetMember);

            return(result);
        }
Example #19
0
        private IEmitterType ConvertMember(MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember)
        {
            if (member.TypePair.IsDeepCloneable)
            {
                return sourceMemeber;
            }

            MapperCacheItem mapperCacheItem = CreateMapperCacheItem(member.TypePair);

            IEmitterType result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember);
            return result;
        }
        private IEmitterType ConvertMember(TypePair parentTypePair, MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember)
        {
            if (member.TypePair.IsDeepCloneable && _config.GetBindingConfig(parentTypePair).HasNoValue)
            {
                return sourceMemeber;
            }

            MapperCacheItem mapperCacheItem = CreateMapperCacheItem(parentTypePair, member);

            IEmitterType result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember);
            return result;
        }
Example #21
0
        private IEmitterType ConvertMember(MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember)
        {
            if (member.TypePair.IsDeepCloneable)
            {
                return(sourceMemeber);
            }

            MapperCacheItem mapperCacheItem = CreateMapperCacheItem(member.TypePair);

            IEmitterType result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember);

            return(result);
        }
        private void EmitConvertItem(TypeBuilder typeBuilder, TypePair typePair, string methodName = ConvertItemMethod)
        {
            MapperCacheItem mapperCacheItem = CreateMapperCacheItem(typePair);

            MethodBuilder methodBuilder = typeBuilder.DefineMethod(methodName, OverrideProtected, typeof(object), new[] { typeof(object) });

            IEmitterType sourceMemeber = EmitArgument.Load(typeof(object), 1);
            IEmitterType targetMember  = EmitNull.Load();

            IEmitterType callMapMethod = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember);

            EmitReturn.Return(callMapMethod).Emit(new CodeGenerator(methodBuilder.GetILGenerator()));
        }
Example #23
0
        private IEmitter Build(MappingMember member)
        {
            IEmitterType sourceObject = EmitArgument.Load(member.TypePair.Source, 1);
            IEmitterType targetObject = EmitArgument.Load(member.TypePair.Target, 2);

            IEmitterType sourceMember = LoadMember(member.Source, sourceObject);
            IEmitterType targetMember = LoadMember(member.Target, targetObject);

            IEmitterType convertedMember = ConvertMember(member, sourceMember, targetMember);

            IEmitter result = StoreTargetObjectMember(member, targetObject, convertedMember);

            return(result);
        }
Example #24
0
        private IEmitterType ConvertMember(TypePair parentTypePair, MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember)
        {
            //            if (member.TypePair.IsDeepCloneable && _config.GetBindingConfig(parentTypePair).HasNoValue)
            if (member.TypePair.IsDeepCloneable)
            {
                return(sourceMemeber);
            }

            MapperCacheItem mapperCacheItem = CreateMapperCacheItem(parentTypePair, member);

            IEmitterType result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember);

            return(result);
        }
Example #25
0
        private IEmitterType LoadMember(List <MemberInfo> members, IEmitterType sourceObject, int loadLevel)
        {
            IEmitterType dummySource = sourceObject;

            if (members.Count == 1)
            {
                return(LoadMember(members[0], dummySource));
            }
            for (int i = 0; i < loadLevel; i++)
            {
                dummySource = LoadMember(members[i], dummySource);
            }
            return(dummySource);
        }
        private void EmitEnumerableToTarget(Type parentType, TypeBuilder typeBuilder, TypePair typePair,
                                            string methodName, string templateMethodName)
        {
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(methodName, OverrideProtected, typePair.Target, new[] { typeof(IEnumerable) });

            Type sourceItemType = typePair.Source.GetCollectionItemType();
            Type targetItemType = typePair.Target.GetCollectionItemType();

            EmitConvertItem(typeBuilder, new TypePair(sourceItemType, targetItemType));

            MethodInfo methodTemplate = parentType.GetGenericMethod(templateMethodName, targetItemType);

            IEmitterType returnValue = EmitMethod.Call(methodTemplate, EmitThis.Load(parentType), EmitArgument.Load(typeof(IEnumerable), 1));

            EmitReturn.Return(returnValue).Emit(new CodeGenerator(methodBuilder.GetILGenerator()));
        }
        private void EmitDictionaryToTarget(Type parentType, TypeBuilder typeBuilder, TypePair typePair,
                                            string methodName, string templateMethodName)
        {
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(methodName, OverrideProtected, typePair.Target, new[] { typeof(IEnumerable) });

            KeyValuePair <Type, Type> sourceTypes = typePair.Source.GetDictionaryItemTypes();
            KeyValuePair <Type, Type> targetTypes = typePair.Target.GetDictionaryItemTypes();

            EmitConvertItem(typeBuilder, new TypePair(sourceTypes.Key, targetTypes.Key), ConvertItemKeyMethod);
            EmitConvertItem(typeBuilder, new TypePair(sourceTypes.Value, targetTypes.Value));

            var        arguments      = new[] { sourceTypes.Key, sourceTypes.Value, targetTypes.Key, targetTypes.Value };
            MethodInfo methodTemplate = parentType.GetGenericMethod(templateMethodName, arguments);

            IEmitterType returnValue = EmitMethod.Call(methodTemplate, EmitThis.Load(parentType), EmitArgument.Load(typeof(IEnumerable), 1));

            EmitReturn.Return(returnValue).Emit(new CodeGenerator(methodBuilder.GetILGenerator()));
        }
        private void EmitEnumerableToTarget(
            Type parentType,
            TypeBuilder typeBuilder,
            TypePair typePair,
            TypePair collectionItemTypePair,
            string methodName,
            string templateMethodName)
        {
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(methodName, OVERRIDE_PROTECTED, typePair.Target, new[] { typeof(IEnumerable) });

            EmitConvertItem(typeBuilder, collectionItemTypePair);

            MethodInfo methodTemplate = parentType.GetGenericMethod(templateMethodName, collectionItemTypePair.Target);

            IEmitterType returnValue = EmitMethod.Call(methodTemplate, EmitThis.Load(parentType), EmitArgument.Load(typeof(IEnumerable), 1));

            EmitReturn.Return(returnValue).Emit(new CodeGenerator(methodBuilder.GetILGenerator()));
        }
Example #29
0
        /// <summary>
        /// Creates a new Factory.
        /// </summary>
        /// <param name="id">The unique identifaction name to give the Factory.</param>
        public Factory(string id, ParameterCollection spawnType,
                       ParameterCollection spawnObject, ParameterCollection cycleInfo)
        {
            this.id = id;

            spawnObj = spawnObject;

            object emit = AssemblyManager.CreateInstance(spawnType);

            if (emit != null)
            {
                emitter = emit as IEmitterType;
            }

            object cyc = AssemblyManager.CreateInstance(cycleInfo);

            if (cyc != null)
            {
                cycle = cyc as Cycle;

                cycle.OnSpawn += new OnSpawnEvent(Spawn);
            }
        }
Example #30
0
 public static IEmitterType Load(IEmitterType source, PropertyInfo property)
 {
     return new EmitLoadProperty(source, property);
 }
Example #31
0
 public static IEmitterType Box(IEmitterType value)
 {
     return(new EmitBox(value));
 }
Example #32
0
 private static IEmitterType StoreFiled(FieldInfo field, IEmitterType targetObject, IEmitterType value)
 {
     return EmitField.Store(field, targetObject, value);
 }
Example #33
0
 public EmitStoreProperty(PropertyInfo property, IEmitterType targetObject, IEmitterType value)
 {
     MethodInfo method = property.GetSetMethod();
     _callMethod = EmitMethod.Call(method, targetObject, value);
     ObjectType = _callMethod.ObjectType;
 }
Example #34
0
 private static IEmitterType StoreProperty(PropertyInfo property, IEmitterType targetObject, IEmitterType value)
 {
     return(EmitProperty.Store(property, targetObject, value));
 }
Example #35
0
 public static IEmitterType Box(IEmitterType value)
 {
     return new EmitBox(value);
 }
Example #36
0
 private IEmitterType LoadProperty(IEmitterType source, PropertyInfo property)
 {
     return EmitProperty.Load(source, property);
 }
Example #37
0
 private IEmitterType LoadProperty(IEmitterType source, PropertyInfo property)
 {
     return(EmitProperty.Load(source, property));
 }
Example #38
0
 private EmitBox(IEmitterType value)
 {
     _value     = value;
     ObjectType = value.ObjectType;
 }
Example #39
0
 public static IEmitterType Return(IEmitterType returnValue, Type returnType = null)
 {
     return new EmitReturn(returnValue, returnType);
 }
Example #40
0
 private IEmitterType LoadField(IEmitterType source, FieldInfo field)
 {
     return EmitField.Load(source, field);
 }
Example #41
0
 private IEmitterType LoadMember(MemberInfo member, IEmitterType sourceObject)
 {
     IEmitterType result = null;
     member.ToOption()
           .Match(x => x.IsField(), x => result = LoadField(sourceObject, (FieldInfo)x))
           .Match(x => x.IsProperty(), x => result = LoadProperty(sourceObject, (PropertyInfo)x));
     return result;
 }
Example #42
0
 public static IEmitterType Load(IEmitterType array, int index)
 {
     return new EmitLoadArray(array, index);
 }
Example #43
0
 public EmitLoadArray(IEmitterType array, int index)
 {
     _array = array;
     _index = index;
     ObjectType = array.ObjectType.GetElementType();
 }
Example #44
0
 public static IEmitterType Call(MethodInfo method, IEmitterType invocationObject, params IEmitterType[] arguments)
 {
     return new EmitterCallMethod(method, invocationObject, arguments);
 }
Example #45
0
 public static IEmitterType Store(FieldInfo field, IEmitterType targetObject, IEmitterType value)
 {
     return new EmitStoreField(field, targetObject, value);
 }
Example #46
0
 public static IEmitterType Load(IEmitterType source, FieldInfo field)
 {
     var result = new EmitLoadField(source, field);
     return result;
 }
Example #47
0
 private IEmitterType LoadField(IEmitterType source, FieldInfo field)
 {
     return(EmitField.Load(source, field));
 }
Example #48
0
 public EmitLoadProperty(IEmitterType source, PropertyInfo property)
 {
     _source    = source;
     _property  = property;
     ObjectType = property.PropertyType;
 }
Example #49
0
 private EmitBox(IEmitterType value)
 {
     _value = value;
     ObjectType = value.ObjectType;
 }
Example #50
0
 private EmitReturn(IEmitterType returnValue, Type returnType)
 {
     ObjectType = returnType ?? returnValue.ObjectType;
     _returnValue = returnValue;
 }
Example #51
0
 private static IEmitterType StoreFiled(FieldInfo field, IEmitterType targetObject, IEmitterType value)
 {
     return(EmitField.Store(field, targetObject, value));
 }
Example #52
0
 public static IEmitterType Load(IEmitterType source, PropertyInfo property)
 {
     return(new EmitLoadProperty(source, property));
 }
Example #53
0
 public static IEmitterType Store(PropertyInfo property, IEmitterType targetObject, IEmitterType value)
 {
     return new EmitStoreProperty(property, targetObject, value);
 }
Example #54
0
 public EmitLoadProperty(IEmitterType source, PropertyInfo property)
 {
     _source = source;
     _property = property;
     ObjectType = property.PropertyType;
 }
Example #55
0
 public EmitLoadField(IEmitterType source, FieldInfo field)
 {
     _source = source;
     _field = field;
     ObjectType = field.FieldType;
 }
Example #56
0
 private static IEmitterType StoreProperty(PropertyInfo property, IEmitterType targetObject, IEmitterType value)
 {
     return EmitProperty.Store(property, targetObject, value);
 }