Exemple #1
0
        /// <summary>
        /// Returns all matching FileIndexItems
        /// </summary>
        /// <param name="pfd">The File you are looking for</param>
        /// <returns>all FileIndexItems</returns>
        public PackedFileDescriptors FindFile(Interfaces.Files.IPackedFileDescriptor pfd)
        {
            ArrayList list = new ArrayList();

            if (!flat)
            {
                if (index.ContainsKey(pfd.Type))
                {
                    Hashtable groups = (Hashtable)index[pfd.Type];
                    if (groups.ContainsKey(pfd.Group))
                    {
                        Hashtable instances = (Hashtable)groups[pfd.Group];
                        if (instances.ContainsKey(pfd.LongInstance))
                        {
                            return((PackedFileDescriptors)instances[pfd.LongInstance]);
                        }
                    }
                }

                return(new PackedFileDescriptors());
            }
            else
            {
                PackedFileDescriptors ret = new PackedFileDescriptors();
                foreach (Interfaces.Files.IPackedFileDescriptor i in pfds)
                {
                    if (i.Equals(pfd))
                    {
                        ret.Add(i);
                    }
                }

                return(ret);
            }
        }
Exemple #2
0
 internal void RemoveChanged(SimPe.Interfaces.Files.IPackedFileDescriptor pfd)
 {
     if (!flat)
     {
         foreach (uint type in index.Keys)
         {
             Hashtable groups = (Hashtable)index[type];
             foreach (uint group in groups.Keys)
             {
                 Hashtable instances = (Hashtable)groups[group];
                 foreach (ulong instance in instances.Keys)
                 {
                     PackedFileDescriptors list = (PackedFileDescriptors)instances[instance];
                     for (int i = list.Count - 1; i >= 0; i--)
                     {
                         if (list[i] == pfd)
                         {
                             RemoveFromList(pfds, list[i]);
                             list.RemoveAt(i);
                         }
                     }
                 }
             }
         }
     }
     else
     {
         RemoveFromList(pfds, pfd);
     }
 }
Exemple #3
0
 /// <summary>
 /// Return a flat list of all stored pfds
 /// </summary>
 /// <returns></returns>
 public PackedFileDescriptors Flatten()
 {
     if (pfds == null)
     {
         pfds = new PackedFileDescriptors();
     }
     return(pfds);
 }
Exemple #4
0
 /// <summary>
 /// Create a new Instance
 /// </summary>
 /// <remarks>Same as a call to FileIndex(null)</remarks>
 public ResourceIndex(SimPe.Interfaces.Files.IPackageFile pkg, bool flat, int capacity)
 {
     this.pkg     = pkg;
     pfds         = new PackedFileDescriptors(capacity);
     this.flat    = true;
     higestoffset = 0;
     LoadIndex();
 }
Exemple #5
0
        /// <summary>
        /// Create a clone of this Object
        /// </summary>
        /// <returns>The clone</returns>
        public override object Clone()
        {
            PackedFileDescriptors list = new PackedFileDescriptors();

            foreach (IPackedFileDescriptor item in this)
            {
                list.Add(item);
            }

            return(list);
        }
Exemple #6
0
        /// <summary>
        /// Add a Filedescriptor to the Index
        /// </summary>
        /// <param name="pfd">The Descriptor</param>
        internal void AddIndexFromPfd(SimPe.Interfaces.Files.IPackedFileDescriptor pfd)
        {
            //pfd.Closed += new SimPe.Events.PackedFileChanged(ClosedDescriptor);
            if (!flat)
            {
                pfd.DescriptionChanged += new EventHandler(DescriptorChanged);
            }

            Hashtable             groups    = null;
            Hashtable             instances = null;
            PackedFileDescriptors files     = null;

            if (pfd.Offset + pfd.Size > higestoffset)
            {
                higestoffset = (uint)(pfd.Offset + pfd.Size);
            }

            if (!flat)
            {
                if (index.ContainsKey(pfd.Type))
                {
                    groups = (Hashtable)index[pfd.Type];
                }
                else
                {
                    groups          = new Hashtable();
                    index[pfd.Type] = groups;
                }

                if (groups.ContainsKey(pfd.Group))
                {
                    instances = (Hashtable)groups[pfd.Group];
                }
                else
                {
                    instances         = new Hashtable();
                    groups[pfd.Group] = instances;
                }

                if (instances.ContainsKey(pfd.LongInstance))
                {
                    files = (PackedFileDescriptors)instances[pfd.LongInstance];
                }
                else
                {
                    files = new PackedFileDescriptors();
                    instances[pfd.LongInstance] = files;
                }

                files.Add(pfd);
            }
            pfds.Add(pfd);
        }
Exemple #7
0
        void RemoveFromList(PackedFileDescriptors list, SimPe.Interfaces.Files.IPackedFileDescriptor pfd)
        {
            bool rem = false;

            for (int i = 0; i < list.Count; i++)
            {
                SimPe.Interfaces.Files.IPackedFileDescriptor p = list[i];
                if (p.Equals(pfd))
                {
                    list.RemoveAt(i);
                    rem = true;
                }
            }

            if (!rem)
            {
                throw new Exception("Bugger");
            }
        }
Exemple #8
0
        /// <summary>
        /// Removes an Item from the Table
        /// </summary>
        /// <param name="pfd">The item you want to remove</param>
        internal PackedFileDescriptors RemoveDeleteMarkedItem()
        {
            PackedFileDescriptors list;
            PackedFileDescriptors removed = new PackedFileDescriptors();

            if (!flat)
            {
                foreach (uint type in index.Keys)
                {
                    Hashtable groups = (Hashtable)index[type];
                    foreach (uint group in groups.Keys)
                    {
                        Hashtable instances = (Hashtable)groups[group];
                        foreach (ulong instance in instances.Keys)
                        {
                            list = (PackedFileDescriptors)instances[instance];
                            for (int i = list.Count - 1; i >= 0; i--)
                            {
                                if (list[i].MarkForDelete)
                                {
                                    pfds.Remove(list[i]);
                                    removed.Add(list[i]);
                                    list.RemoveAt(i);
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                for (int i = this.pfds.Count - 1; i >= 0; i--)
                {
                    if (pfds[i].MarkForDelete)
                    {
                        pfds.RemoveAt(i);
                    }
                }
            }

            return(removed);
        }
Exemple #9
0
        /// <summary>
        /// Returns all matching FileIndexItems for the passed type
        /// </summary>
        /// <param name="type">the Type of the Files</param>
        /// <returns>all FileIndexItems</returns>
        public PackedFileDescriptors FindFile(uint type)
        {
            PackedFileDescriptors list = new PackedFileDescriptors();

            if (!flat)
            {
                if (index.ContainsKey(type))
                {
                    Hashtable groups = (Hashtable)index[type];
                    foreach (uint group in groups.Keys)
                    {
                        if (groups.ContainsKey(group))
                        {
                            Hashtable instances = (Hashtable)groups[group];

                            foreach (ulong instance in instances.Keys)
                            {
                                list.AddRange((PackedFileDescriptors)instances[instance]);
                            }
                        }
                    }
                }
            }
            else
            {
                PackedFileDescriptors ret = new PackedFileDescriptors();
                foreach (Interfaces.Files.IPackedFileDescriptor i in pfds)
                {
                    if (i.Type == type)
                    {
                        ret.Add(i);
                    }
                }

                return(ret);
            }

            return(list);
        }
Exemple #10
0
        /// <summary>
        /// Return all matching FileIndexItems (by Instance)
        /// </summary>
        /// <param name="group">The Group you are looking for</param>
        /// <param name="instance">The instance you are looking for</param>
        /// <returns>all FileIndexItems</returns>
        public PackedFileDescriptors FindFileByGroupAndInstance(uint group, ulong instance)
        {
            if (!flat)
            {
                PackedFileDescriptors list = new PackedFileDescriptors();

                foreach (uint type in index.Keys)
                {
                    Hashtable groups = (Hashtable)index[type];
                    if (groups.ContainsKey(group))
                    {
                        Hashtable instances = (Hashtable)groups[group];
                        if (instances.ContainsKey(instance))
                        {
                            list.AddRange((PackedFileDescriptors)instances[instance]);
                        }
                    }
                }

                //return the Result
                return(list);
            }
            else
            {
                PackedFileDescriptors ret = new PackedFileDescriptors();
                foreach (Interfaces.Files.IPackedFileDescriptor i in pfds)
                {
                    if (i.LongInstance == instance && i.Group == group)
                    {
                        ret.Add(i);
                    }
                }

                return(ret);
            }
        }