Exemple #1
0
 internal void RemoveImporter(NamespaceEntry entry)
 {
     lock (this.importers)
     {
         for (int i = importers.Count - 1; i >= 0; i--)
         {
             if (entry == importers[i])
             {
                 importers.RemoveAt(i);
                 entry.Namespace = null;
                 break;
             }
         }
     }
 }
Exemple #2
0
        internal NamespaceEntry RegisterDynamicImport(NamespaceEntry pe)
        {
            lock (namespaces)
            {
#if DEBUG
                TracesOutputProvider.TracesOutput.OutputTrace("dynamicImportPackage: try " + pe);
#endif

                Namespace p = (Namespace)namespaces[pe.Name];
                if (p != null && p.Provider != null)
                {
                    p.AddImporter(pe);
#if DEBUG
                    TracesOutputProvider.TracesOutput.OutputTrace("dynamicImportPackage: added " + pe);
#endif
                    return(p.Provider);
                }
                return(null);
            }
        }
Exemple #3
0
        internal bool RemoveExporter(NamespaceEntry entry)
        {
            if (entry == provider)
            {
                return(false);
            }

            lock (this.exporters)
            {
                for (int i = exporters.Count - 1; i >= 0; i--)
                {
                    if (entry == exporters[i])
                    {
                        exporters.RemoveAt(i);
                        entry.Namespace = null;
                        break;
                    }
                }
            }

            return(true);
        }
Exemple #4
0
        internal bool UnregisterPackages(IEnumerator exports, IEnumerator imports, bool force)
        {
            lock (namespaces)
            {
                bool allRemoved = true;
                while (exports.MoveNext())
                {
                    NamespaceEntry pe = (NamespaceEntry)exports.Current;
                    Namespace      p  = pe.Namespace;
                    if (p != null)
                    {
#if DEBUG
                        TracesOutputProvider.TracesOutput.OutputTrace("unregisterPackages: unregister export - " + pe);
#endif
                        if (!p.RemoveExporter(pe))
                        {
                            if (force)
                            {
                                p.Provider = null;
                                p.RemoveExporter(pe);
#if DEBUG
                                TracesOutputProvider.TracesOutput.OutputTrace("unregisterPackages: forced unregister - " + pe);
#endif
                            }
                            else
                            {
                                allRemoved = false;
                                p.Zombie   = true;
#if DEBUG
                                TracesOutputProvider.TracesOutput.OutputTrace("unregisterPackages: failed to unregister - " + pe);
#endif
                                continue;
                            }
                        }

                        if (p.IsEmpty)
                        {
                            namespaces.Remove(pe.Name);
                        }
                    }
                }

                if (allRemoved)
                {
                    while (imports.MoveNext())
                    {
                        NamespaceEntry pe = (NamespaceEntry)imports.Current;
                        Namespace      p  = pe.Namespace;
                        if (p != null)
                        {
#if DEBUG
                            TracesOutputProvider.TracesOutput.OutputTrace("unregisterPackages: unregister import - " + pe.ToString());
#endif
                            p.RemoveImporter(pe);
                            if (p.IsEmpty)
                            {
                                namespaces.Remove(pe.Name);
                            }
                        }
                    }
                }
                return(allRemoved);
            }
        }
Exemple #5
0
 internal bool IsProvider(NamespaceEntry pe)
 {
     return(pe.Namespace != null && pe.Namespace.Provider == pe);
 }
Exemple #6
0
 internal ExportedNamespace(NamespaceEntry entry)
 {
     this.entry = entry;
 }
        public override bool Equals(Object obj)
        {
            NamespaceEntry o = (NamespaceEntry)obj;

            return(name.Equals(o.name) && bundle == o.bundle && version.Equals(o.version));
        }
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="pe">The entry to be copied.</param>
 internal NamespaceEntry(NamespaceEntry pe)
 {
     this.name    = pe.name;
     this.version = pe.version;
     this.bundle  = pe.bundle;
 }
 public Int32 CompareVersion(NamespaceEntry entry)
 {
     return(version.CompareTo(entry.version));
 }
 internal bool NameEqual(NamespaceEntry other)
 {
     return(name.Equals(other.name));
 }