コード例 #1
0
 public PermutationContainerPPA CreatePermutation(Permutation permutation, PatternBasic positions,
                                                  ExtensionMap extensionMap)
 {
     return(new PermutationContainerPPA(permutation, positions,
                                        new MinimumLettersChecked(avoidedPermutations), new ExMapComputationUnsorted(),
                                        extensionMap, avoidedPermutations.LengthLongestPermutation));
 }
コード例 #2
0
        public void SetResponse(string command, object data)
        {
            ResponseMap[command] = JsonConvert.SerializeObject(data);

            if (ExtensionMap.ContainsKey(command))
            {
                ExtensionMap[command]();
            }

            if (PromiseMap.ContainsKey(command))
            {
                Promise.Promise promise = PromiseMap[command];
                PromiseMap.Remove(command);
                promise.Resolve();
            }
            Signals.ResponseHelper.Dispatch(command);
            //dispatcher.Dispatch(commandType, command);
        }
コード例 #3
0
        public void RemoveListen(string command)
        {
            command = command.Split('_')[1];

            if (ExtensionMap.ContainsKey(command))
            {
                ExtensionMap.Remove(command);
            }
        }
コード例 #4
0
        private void ListenInner(string command, ExtensionCallback callback)
        {
            if (ExtensionMap.ContainsKey(command))
            {
                Debug.Log("Already listening command: " + command);
                return;
            }

            ExtensionMap.Add(command, callback);
        }
コード例 #5
0
 public PermutationContainerPPA(Permutation permutation, PatternBasic permutationPositions,
                                IMinimumLettersChecked minimumLettersBeChecked,
                                IExMapComputationUnsorted exMapComputationUnsorted,
                                ExtensionMap extensionMap,
                                int lengthLongestPermutationAvoided, int minimumLettersConsidered)
     : this(permutation, permutationPositions,
            minimumLettersBeChecked, exMapComputationUnsorted,
            extensionMap, lengthLongestPermutationAvoided)
 {
     this.minimumLettersConsidered = minimumLettersConsidered;
 }
コード例 #6
0
 public IPermutationsCollection Successors(Permutation permutation, ExtensionMap extensionMap,
                                           IPermutationsCollection avoidedPermutations)
 {
     if (permutation.Length < avoidedPermutations.LengthLongestPermutation)
     {
         return(CreatePermutationsChecked(permutation, extensionMap, avoidedPermutations));
     }
     else
     {
         return(CreatePermutationsUnChecked(permutation, extensionMap));
     }
 }
コード例 #7
0
 public PermutationContainerPPA(Permutation permutation, PatternBasic permutationPositions,
                                IMinimumLettersChecked minimumLettersBeChecked,
                                IExMapComputationUnsorted exMapComputationUnsorted,
                                ExtensionMap extensionMap, int lengthLongestPermutationAvoided)
     : base(permutation, permutationPositions)
 {
     minimumLettersConsidered             = Math.Min(permutation.Length, lengthLongestPermutationAvoided);
     countSuccessorsComputed              = false;
     this.minimumLettersBeChecked         = minimumLettersBeChecked;
     this.exMapComputationUnsorted        = exMapComputationUnsorted;
     this.extensionMap                    = extensionMap;
     this.lengthLongestPermutationAvoided = lengthLongestPermutationAvoided;
 }
コード例 #8
0
        /// <summary>
        /// Opens an existing virtual disk.
        /// </summary>
        /// <param name="path">The path of the virtual disk to open, can be a URI</param>
        /// <param name="access">The desired access to the disk</param>
        /// <param name="user">The user name to use for authentication (if necessary)</param>
        /// <param name="password">The password to use for authentication (if necessary)</param>
        /// <returns>The Virtual Disk, or <c>null</c> if an unknown disk format</returns>
        public static VirtualDisk OpenDisk(string path, FileAccess access, string user, string password)
        {
            Uri         uri    = PathToUri(path);
            VirtualDisk result = null;

            VirtualDiskTransport transport;

            if (!DiskTransports.TryGetValue(uri.Scheme.ToUpperInvariant(), out transport))
            {
                throw new FileNotFoundException(string.Format(CultureInfo.InvariantCulture, "Unable to parse path '{0}'", path), path);
            }

            try
            {
                transport.Connect(uri, user, password);

                if (transport.IsRawDisk)
                {
                    result = transport.OpenDisk(access);
                }
                else
                {
                    string extension = Path.GetExtension(uri.AbsolutePath).ToUpperInvariant();
                    if (extension.StartsWith(".", StringComparison.Ordinal))
                    {
                        extension = extension.Substring(1);
                    }

                    VirtualDiskFactory factory;
                    if (ExtensionMap.TryGetValue(extension, out factory))
                    {
                        result = factory.OpenDisk(transport.GetFileLocator(), transport.GetFileName(), access);
                    }
                }

                if (result != null)
                {
                    result._transport = transport;
                    transport         = null;
                }

                return(result);
            }
            finally
            {
                if (transport != null)
                {
                    transport.Dispose();
                }
            }
        }
コード例 #9
0
 protected void CorrectExtensionMap(Permutation newPermutation, ExtensionMap extensionMap,
                                    IPermutationsCollection avoidedPermutations)
 {
     for (int i = 0; i < extensionMap.Length; i++)
     {
         if (extensionMap.Get(i))
         {
             if (avoidedPermutations.Contains(newPermutation.InsertPosition(i)))
             {
                 extensionMap.SetMutable(i, false);
             }
         }
     }
 }
コード例 #10
0
        public ExtensionMap Compute(IPermutationDictionary <ExtensionMap> permExMaps, Permutation permutation,
                                    IPosition positions, int lettersConsidered)
        {
            ExtensionMap extensionMapDefault = extensionMapFactory.
                                               GetExtensionMapDefault(permutation.Length + 1, true);

            if (lettersConsidered <= 0)
            {
                return(extensionMapDefault);
            }

            ExtensionMap[] extensionMaps = new ExtensionMap[lettersConsidered];

            int         positionTo     = positions.GetPosition(permutation.Length - 1);
            Permutation newPermutation = permutation.Delete(positionTo, new int[] {});

            permExMaps.TryGetValue(newPermutation, out ExtensionMap extensionMap);
            extensionMap     = extensionMap.Insert(positionTo, extensionMap.Get(positionTo));
            extensionMaps[0] = extensionMap;

            int  positionFrom;
            bool positionDiminished = false;

            for (int i = 0; i < lettersConsidered - 1; i++)
            {
                positionFrom = positions.GetPosition(permutation.Length - i - 2);
                if (positionFrom >= positionTo)
                {
                    positionFrom--;
                    positionDiminished = true;
                }
                newPermutation = newPermutation.Switch(positionFrom, positionTo);
                if (positionDiminished)
                {
                    positionFrom++;
                }
                permExMaps.TryGetValue(newPermutation, out extensionMap);
                extensionMap         = extensionMap.Insert(positionFrom, extensionMap.Get(positionFrom));
                extensionMaps[i + 1] = extensionMap;
                positionTo           = positionFrom;
                positionDiminished   = false;
            }

            return(extensionMapDefault.And(extensionMaps));
        }
コード例 #11
0
ファイル: VirtualDisk.cs プロジェクト: szikra/discutils
        internal static VirtualDiskLayer OpenDiskLayer(FileLocator locator, string path, FileAccess access)
        {
            string extension = Path.GetExtension(path).ToUpperInvariant();

            if (extension.StartsWith(".", StringComparison.Ordinal))
            {
                extension = extension.Substring(1);
            }

            VirtualDiskFactory factory;

            if (ExtensionMap.TryGetValue(extension, out factory))
            {
                return(factory.OpenDiskLayer(locator, path, access));
            }

            return(null);
        }
コード例 #12
0
        /// <summary>
        /// Locates VirtualDiskFactory factories attributed with VirtualDiskFactoryAttribute, and types marked with VirtualDiskTransportAttribute, that are able to work with Virtual Disk types.
        /// </summary>
        /// <param name="assembly">An assembly to scan</param>
        public static void RegisterVirtualDiskTypes(Assembly assembly)
        {
            foreach (Type type in assembly.GetTypes())
            {
                VirtualDiskFactoryAttribute diskFactoryAttribute = (VirtualDiskFactoryAttribute)ReflectionHelper.GetCustomAttribute(type, typeof(VirtualDiskFactoryAttribute), false);
                if (diskFactoryAttribute != null)
                {
                    VirtualDiskFactory factory = (VirtualDiskFactory)Activator.CreateInstance(type);
                    TypeMap.Add(diskFactoryAttribute.Type, factory);

                    foreach (string extension in diskFactoryAttribute.FileExtensions)
                    {
                        ExtensionMap.Add(extension.ToUpperInvariant(), factory);
                    }
                }

                VirtualDiskTransportAttribute diskTransportAttribute = ReflectionHelper.GetCustomAttribute(type, typeof(VirtualDiskTransportAttribute), false) as VirtualDiskTransportAttribute;
                if (diskTransportAttribute != null)
                {
                    DiskTransports.Add(diskTransportAttribute.Scheme.ToUpperInvariant(), type);
                }
            }
        }
コード例 #13
0
ファイル: VirtualDisk.cs プロジェクト: szikra/discutils
        /// <summary>
        /// Opens an existing virtual disk, possibly from within an existing disk.
        /// </summary>
        /// <param name="fs">The file system to open the disk on.</param>
        /// <param name="path">The path of the virtual disk to open.</param>
        /// <param name="access">The desired access to the disk.</param>
        /// <returns>The Virtual Disk, or <c>null</c> if an unknown disk format.</returns>
        public static VirtualDisk OpenDisk(DiscFileSystem fs, string path, FileAccess access)
        {
            if (fs == null)
            {
                return(OpenDisk(path, access));
            }

            string extension = Path.GetExtension(path).ToUpperInvariant();

            if (extension.StartsWith(".", StringComparison.Ordinal))
            {
                extension = extension.Substring(1);
            }

            VirtualDiskFactory factory;

            if (ExtensionMap.TryGetValue(extension, out factory))
            {
                return(factory.OpenDisk(fs, path, access));
            }

            return(null);
        }
コード例 #14
0
 public static string GetExtension(string mime)
 {
     return(mime.IsNeu() ? mime : ExtensionMap.ToList().FirstOrDefault(x => x.Value == mime.ToLower()).Key);
 }
コード例 #15
0
        private IPermutationsCollection CreatePermutationsChecked(Permutation permutation, ExtensionMap extensionMap,
                                                                  IPermutationsCollection avoidedPermutations)
        {
            PermutationCollection permutationCollection = new PermutationCollection();
            Permutation           newPermutation;

            foreach (var position in extensionMap.Ctz())
            {
                newPermutation = permutation.InsertPosition(position);
                if (!avoidedPermutations.Contains(newPermutation))
                {
                    permutationCollection.Add(newPermutation);
                }
            }

            return(permutationCollection);
        }
コード例 #16
0
        private IPermutationsCollection CreatePermutationsUnChecked(Permutation permutation, ExtensionMap extensionMap)
        {
            PermutationCollection permutationCollection = new PermutationCollection();

            foreach (var position in extensionMap.Ctz())
            {
                permutationCollection.Add(permutation.InsertPosition(position));
            }

            return(permutationCollection);
        }