//public static ICopier Create(Type from, Type to)
        public static ICopier Create <TSrc, TDest>()
        {
            const string    asmName = "DynamicCopier";
            AssemblyBuilder asm     = CreateAsm(asmName);
            ModuleBuilder   mb      = asm.DefineDynamicModule(asmName, asmName + ".dll");

            TypeBuilder   typeBuilder   = mb.DefineType("DynamicCopier", TypeAttributes.Public, typeof(object), new Type[] { typeof(ICopier) });
            MethodBuilder methodBuilder = typeBuilder.DefineMethod(
                "Copy",
                MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.ReuseSlot,
                typeof(void),
                new Type[] { typeof(TSrc), typeof(TDest) }
                );

            ILGenerator ilGenerator = methodBuilder.GetILGenerator();

            FieldInfo[] fieldsFrom = typeof(TSrc).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);


            for (int i = 0; i < fieldsFrom.Length; i++)
            {
                ilGenerator.Emit(OpCodes.Ldarg_2);
                ilGenerator.Emit(OpCodes.Ldarg_1);
                ilGenerator.Emit(OpCodes.Ldfld, fieldsFrom[i]);
                ilGenerator.Emit(OpCodes.Stfld, typeof(TDest).GetField(fieldsFrom[i].Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance));
            }
            ilGenerator.Emit(OpCodes.Ret);

            Type    dynCipierType = typeBuilder.CreateType();
            ICopier dynCopier     = (ICopier)Activator.CreateInstance(dynCipierType);

            asm.Save(asmName + ".dll");

            return(dynCopier);
        }
예제 #2
0
 public PoolCopierSetter(ICopier copier, FieldInfo field, object source)
 {
     this.copier = copier;
     this.field = field;
     this.source = source;
     isUnityObject = source is UnityEngine.Object;
 }
예제 #3
0
        /// <summary>
        /// Вызов копировальщика, в соответствие с типом item
        /// </summary>
        /// <param name="items">список объектов для копирования</param>
        /// <param name="dest">каталог назначения</param>
        /// <param name="interval">интервал копирования</param>
        public void Copy(List <Item> items, string dest, int interval, bool isDeleteMode)
        {
            ICopier copier = null;

            foreach (var item in items)
            {
                if (!item.IsHandled)
                {
                    lock (_locker)
                    {
                        item.IsHandled = true;
                        if (item.IsDirectory)
                        {
                            copier = DirectoryRecursiveCopier.GetCopier();
                        }
                        else
                        {
                            copier = FileCopier.GetCopier();
                        }

                        copier.Copy(item.Name, Path.Combine(dest, Path.GetFileName(item.Name)), isDeleteMode);
                        Thread.Sleep(interval);
                    }
                }
            }
        }
예제 #4
0
 public CopyProcessor(ITaskContextInternal taskContext, ICopier copier, FullPath destinationRootDir, bool logFiles = true)
 {
     _taskContext        = taskContext;
     _copier             = copier;
     _destinationRootDir = destinationRootDir;
     _logFiles           = logFiles;
 }
예제 #5
0
        public ICopier Copy()
        {
            const string    asmName       = "DynamicCopy";
            AssemblyBuilder asm           = CreateAsm(asmName);
            ModuleBuilder   moduleBuilder = asm.DefineDynamicModule(asmName, asmName + ".dll");

            TypeBuilder   typeBuilder   = moduleBuilder.DefineType("DynamicCopy", TypeAttributes.Public, typeof(object), new Type[] { typeof(ICopier) });
            MethodBuilder methodBuilder = typeBuilder.DefineMethod("CopyDynamically", MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.ReuseSlot, typeof(object), new Type[] { typeof(object) });

            ILGenerator     ilGenerator = methodBuilder.GetILGenerator();
            ConstructorInfo constr      = dst.GetConstructor(Type.EmptyTypes);
            LocalBuilder    result      = ilGenerator.DeclareLocal(dst);

            ilGenerator.Emit(OpCodes.Newobj, constr);
            ilGenerator.Emit(OpCodes.Stloc_0);
            ilGenerator.Emit(OpCodes.Ldloc_0);
            foreach (MatchInfo m in listOfProperties)
            {
                MethodInfo gSrc = srcPropertyInfo[m.SrcIdx].GetMethod;
                MethodInfo sDst = dstPropertyInfo[m.DstIdx].SetMethod;
                ilGenerator.Emit(OpCodes.Ldarg_1);
                ilGenerator.Emit(OpCodes.Callvirt, gSrc);
                ilGenerator.Emit(OpCodes.Callvirt, sDst);
                ilGenerator.Emit(OpCodes.Ldloc_0);
            }
            ilGenerator.Emit(OpCodes.Ret);

            Type    dinamicCreateType = typeBuilder.CreateType();
            ICopier dinamicCreate     = (ICopier)Activator.CreateInstance(dinamicCreateType);

            asm.Save(asmName + ".dll");
            return(dinamicCreate);
        }
예제 #6
0
 public PoolCopierSetter(ICopier copier, FieldInfo field, object source)
 {
     this.copier   = copier;
     this.field    = field;
     this.source   = source;
     isUnityObject = source is UnityEngine.Object;
 }
예제 #7
0
        public void Initialize()
        {
            _source      = "";
            _destination = "";

            _copier = new Copier();
        }
예제 #8
0
        static void Main(string[] args)
        {
            DisplayBanner();
            if (args.Length < 1)
            {
                DisplayHelp();
                return;
            }

            IIocContainer iocContainer = InitializeIocContainer();

            ReadOnlyControlFile    control         = new ReadOnlyControlFile(args[0]);
            IFinder                finder          = iocContainer.Resolve <IFinder>();
            ICopier                copier          = iocContainer.Resolve <ICopier>();
            IUnwantedFileRemover   remover         = iocContainer.Resolve <IUnwantedFileRemover>();
            IUnwantedFolderRemover folderRemover   = iocContainer.Resolve <IUnwantedFolderRemover>();
            IFileUtilities         fileUtilities   = iocContainer.Resolve <IFileUtilities>();
            IPathUtilities         pathUtilities   = iocContainer.Resolve <IPathUtilities>();
            IPlaylistFactory       playlistFactory = iocContainer.Resolve <IPlaylistFactory>();

            Generator generator = new Generator(finder, fileUtilities, pathUtilities, playlistFactory);

            generator.StatusUpdate += new EventHandler <StatusUpdateEventArgs>(StatusUpdate);

            Synchronizer synchronizer = new Synchronizer(finder, copier, remover, folderRemover);

            synchronizer.StatusUpdate += new EventHandler <StatusUpdateEventArgs>(StatusUpdate);

            synchronizer.Synchronize(control, false);

            if (!string.IsNullOrEmpty(control.GetPlaylistFileName()))
            {
                generator.GeneratePlaylist(control, true);
            }
        }
예제 #9
0
 public override object getMappedObject(object src)
 {
     if (cop == null)
     {
         cop = emit.Copy();
     }
     return(cop.CopyDynamically(src));
 }
예제 #10
0
 public LoadoutService(ILogger logger, ICopier copier, ILogEventBuilder eventBuilder)
 {
     _logger = logger;
     _copier = copier;
     _eventBuilder = eventBuilder;
     _loadoutRepository = new LoadoutRepository();
     _byPlayerIdQuery = new LoadoutsByUserId();
 }
예제 #11
0
 public HandlerBO()
     : base()
 {
     this.Copier = new SimpleCopy();
     ConfigurationBO cbo = (ConfigurationBO)SingletonManager.GetSingleton(typeof(ConfigurationBO));
     this.QTimer = new Timer(Convert.ToInt32(cbo.CContainer.WaitTime));
     this.QTimer.AutoReset = true;
     this.QTimer.Elapsed += new ElapsedEventHandler(this.Timer_Tick);
 }
예제 #12
0
        public HandlerBO() : base()
        {
            this.Copier = new SimpleCopy();
            ConfigurationBO cbo = (ConfigurationBO)SingletonManager.GetSingleton(typeof(ConfigurationBO));

            this.QTimer           = new Timer(Convert.ToInt32(cbo.CContainer.WaitTime));
            this.QTimer.AutoReset = true;
            this.QTimer.Elapsed  += new ElapsedEventHandler(this.Timer_Tick);
        }
예제 #13
0
        public static Action <T, R> Build <T, R>(this ICopier <T, R> copier)
        {
            if (copier == null)
            {
                throw new ArgumentNullException("copier");
            }

            return(copier.Expression.Compile());
        }
예제 #14
0
파일: Copy.cs 프로젝트: JeremyMcGee/Govan
        public Copy(ICopier copier)
            : base()
        {
            this.copier = copier;

            IsCommand("copy", "Copies a file to a remote host.");
            HasRequiredOption("s|source=", "Source filename on this local system.", s => source = s);
            HasRequiredOption("t|target=", "Target filename on remote system.", t => destination = t);
        }
예제 #15
0
        public CopierFieldInitializer(ICopier copier, object source)
        {
            this.copier = copier;
            this.source = source;

            if (source is IPoolFieldsInitializable)
            {
                ((IPoolFieldsInitializable)source).OnPrePoolFieldsInitialize(this);
                ((IPoolFieldsInitializable)source).OnPostPoolFieldsInitialize(this);
            }
        }
예제 #16
0
 /// <summary>
 /// construct a podcast synchroniser
 /// </summary>
 /// <param name="fileFinder">abstract interface to the file system to find media files</param>
 /// <param name="fileCopier">abstract file copier</param>
 /// <param name="fileRemover">abstract file remover, to synchronise deleted files in the source to the destination</param>
 /// <param name="folderRemover">abstract folder remover, to remove folder that have gone empty during sync</param>
 public Synchronizer(
     IFinder fileFinder,
     ICopier fileCopier,
     IUnwantedFileRemover fileRemover,
     IUnwantedFolderRemover folderRemover)
 {
     FileFinder    = fileFinder;
     FileCopier    = fileCopier;
     FileRemover   = fileRemover;
     FolderRemover = folderRemover;
 }
        public CopierFieldInitializer(ICopier copier, object source)
        {
            this.copier = copier;
            this.source = source;

            if (source is IPoolFieldsInitializable)
            {
                ((IPoolFieldsInitializable)source).OnPrePoolFieldsInitialize(this);
                ((IPoolFieldsInitializable)source).OnPostPoolFieldsInitialize(this);
            }
        }
예제 #18
0
        public Main(ICopier copier, ILogger logger)
        {
            InitializeComponent();


            _copierInstance = copier;
            _logger         = logger;


            // Watch for changes in the copier
            _copierInstance.PropertyChanged += _copierInstance_PropertyChanged;
        }
예제 #19
0
        private static void CopyStudentToPerson(Student s, ICopier copier, String message)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            Person p = null;

            for (int i = 0; i < NUM_REPETITIONS; ++i)
            {
                p = new Person();
                copier.Copy(s, p);
            }
            // Compare the last one just for sanity check
            Assert.AreEqual(s.Name, p.Name);
            Assert.AreEqual(s.Nr, p.Nr);
            sw.Stop();
            Console.WriteLine("{1} copy took {0}ms", sw.ElapsedMilliseconds, message);
        }
예제 #20
0
        public BatchCopier(ICopier fileCopier, IEnumerable<IBeforeCopyTask> beforeCopyTasks, IEnumerable<IAfterCopyTask> afterCopyTasks)
        {
            if (fileCopier == null)
            {
                throw new ArgumentNullException("fileCopier");
            }

            if (beforeCopyTasks == null)
            {
                throw new ArgumentNullException("beforeCopyTasks");
            }

            if (afterCopyTasks == null)
            {
                throw new ArgumentNullException("afterCopyTasks");
            }

            this.fileCopier = fileCopier;
            this.beforeCopyTasks = new List<IBeforeCopyTask>();
            this.beforeCopyTasks.AddRange(beforeCopyTasks);
            this.afterCopyTasks = new List<IAfterCopyTask>();
            this.afterCopyTasks.AddRange(afterCopyTasks);
        }
예제 #21
0
파일: FastCopy.cs 프로젝트: thild/numpy.net
        static FastCopy()
        {
            _asmBuilder = Thread.GetDomain().DefineDynamicAssembly(_asmName, AssemblyBuilderAccess.RunAndSave);
            _modBuilder = _asmBuilder.DefineDynamicModule(_asmName.Name, _asmName.Name + ".dll", true);

            var typeBuilder = _modBuilder.DefineType("FastCopier",
                                                     TypeAttributes.Public
                                                     | TypeAttributes.AutoClass
                                                     | TypeAttributes.AnsiClass
                                                     | TypeAttributes.Class
                                                     | TypeAttributes.Serializable
                                                     | TypeAttributes.BeforeFieldInit);

            typeBuilder.AddInterfaceImplementation(typeof(ICopier));
            var copyMethod = typeBuilder.DefineMethod("Copy",
                                                      MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.Virtual,
                                                      typeof(void),
                                                      new Type[] { typeof(byte[]), typeof(byte[]), typeof(int), typeof(uint) });
            var code = copyMethod.GetILGenerator();

            code.Emit(OpCodes.Ldarg_2);
            code.Emit(OpCodes.Ldc_I4_0);
            code.Emit(OpCodes.Ldelema, typeof(byte));
            code.Emit(OpCodes.Ldarg_1);
            code.Emit(OpCodes.Ldarg_3);
            code.Emit(OpCodes.Ldelema, typeof(byte));
            code.Emit(OpCodes.Ldarg, 4);
            code.Emit(OpCodes.Cpblk);
            code.Emit(OpCodes.Ret);

            typeBuilder.DefineMethodOverride(copyMethod, typeof(ICopier).GetMethod("Copy"));

            var copierType = typeBuilder.CreateType();

            _copier = (ICopier)Activator.CreateInstance(copierType);
        }
예제 #22
0
 public SynchronizeBO()
 {
     this.reporter = new SynchronizeReporter();
     this.copier   = new SimpleCopy();
 }
 public PoolElementCopierSetter(ICopier copier, object source)
 {
     this.copier = copier;
     this.source = source;
     isUnityObject = source is UnityEngine.Object;
 }
예제 #24
0
 public MFU(ICopier copier, IScaner scaner, IPrinter printer)
 {
     _copier  = copier;
     _scaner  = scaner;
     _printer = printer;
 }
예제 #25
0
 public static ICopier <T, R> Copy <T, R, K>(this ICopier <T, R> copier, Expression <Func <T, K> > source, Expression <Func <R, K> > target)
 {
     return(new CopierImpl <T, R>(CopyCore <T, R, K>(copier.Expression, source, target)));
 }
예제 #26
0
 public static ICopier <T, R> Copy <T, R, K>(this ICopier <T, R> copier, Expression <Func <IReturnableMember <T>, K> > source, Expression <Func <IAssignableMember <R>, K> > target)
 {
     return(new CopierImpl <T, R>(CopyCore <T, R, K>(copier.Expression, ReflectionBuilder.ReturnableMember <T, K>(source), ReflectionBuilder.AssignableMember <R, K>(target))));
 }
예제 #27
0
 public static ICopier <T, R> ApplyTarget <T, R>(this ICopier <T, R> copier, IAccessor <R> accessor)
 {
     return(new CopierImpl <T, R>(ApplyTargetCore <T, R>(copier.Expression, accessor.Expression)));
 }
예제 #28
0
 public static ICopier <T, R> ApplyTarget <T, R>(this ICopier <T, R> copier, Expression <Action <IAccessor <R> > > accessor)
 {
     return(new CopierImpl <T, R>(ApplyTargetCore <T, R>(copier.Expression, GetExpression <R>(accessor))));
 }
예제 #29
0
 public CopyProcessor(ITaskContext taskContext, ICopier copier, FullPath destinationRootDir)
 {
     this.taskContext        = taskContext;
     this.copier             = copier;
     this.destinationRootDir = destinationRootDir;
 }
예제 #30
0
 public static void Evaluate <T, R>(this ICopier <T, R> copier, T source, R target)
 {
     Build(copier)(source, target);
 }
예제 #31
0
 /// <summary>
 /// Register a copier with the Spf reader
 /// </summary>
 /// <param name="copier">ICopier object</param>
 public static void RegisterCopier(ICopier copier)
 {
     s_lstCopiers.Add(copier);
 }
예제 #32
0
 public CopyCommand(ICopier copier, IBlobsListing listing)
 {
     this.copier  = copier;
     this.listing = listing;
 }
예제 #33
0
파일: Prep.cs 프로젝트: JeremyMcGee/Govan
 public Prep(ICopier copier)
     : base()
 {
     this.copier = copier;
     IsCommand("prep", "Prepares a host for remote Powershell control.");
 }
예제 #34
0
 public MultiFunctionMachine(ICopier copier, IPrinter printer, IScanner scanner)
 {
     _copier  = copier ?? throw new ArgumentNullException(paramName: nameof(copier));
     _printer = printer ?? throw new ArgumentNullException(paramName: nameof(printer));
     _scanner = scanner ?? throw new ArgumentNullException(paramName: nameof(scanner));
 }
예제 #35
0
 public DynGeneratedCodeCopier()
 {
     //dynCopier = DynCopierBuilder.Create(typeof(Student), typeof(Person));
     dynCopier = DynCopierBuilder.Create <Student, Person>();
 }
예제 #36
0
 public SynchronizeBO(ICopier copier) : this()
 {
     this.copier = copier;
 }
예제 #37
0
 public void SetCopier(ICopier cp)
 {
     copier = cp;
 }
예제 #38
0
 public CopyProcessor(ILogger logger, ICopier copier, string destinationRootDir)
 {
     this.logger             = logger;
     this.copier             = copier;
     this.destinationRootDir = destinationRootDir;
 }
예제 #39
0
 /// <summary>
 /// Register a copier with the Spf reader
 /// </summary>
 /// <param name="copier">ICopier object</param>
 public static void RegisterCopier(ICopier copier)
 {
     s_lstCopiers.Add(copier);
 }