示例#1
0
        public static ProjectDom GetFileDom(FilePath file)
        {
            if (file.IsNull)
            {
                file = Path.GetTempFileName();
            }

            file = file.CanonicalPath;

            lock (singleDatabases)
            {
                SingleFileCacheEntry entry;
                if (singleDatabases.TryGetValue(file, out entry))
                {
                    entry.AccessTime = DateTime.Now;
                    return(entry.Database);
                }
                else
                {
                    if (singleDatabases.Count >= MAX_SINGLEDB_CACHE_SIZE)
                    {
                        DateTime tim      = DateTime.MaxValue;
                        string   toDelete = null;
                        foreach (KeyValuePair <FilePath, SingleFileCacheEntry> pce in singleDatabases)
                        {
                            DateTime ptim = pce.Value.AccessTime;
                            if (ptim < tim)
                            {
                                tim      = ptim;
                                toDelete = pce.Key;
                            }
                        }
                        singleDatabases.Remove(toDelete);
                    }


                    ProjectDom db = ParserDatabase.LoadSingleFileDom(file);
                    db.Uri = "File:" + file;
                    db.UpdateReferences();
                    entry                  = new SingleFileCacheEntry();
                    entry.Database         = db;
                    entry.AccessTime       = DateTime.Now;
                    singleDatabases [file] = entry;
                    db.ReferenceCount      = 1;
                    return(db);
                }
            }
        }
示例#2
0
		public static ProjectDom GetFileDom (FilePath file)
		{
			if (file.IsNull)
				file = Path.GetTempFileName ();
			
			file = file.CanonicalPath;
			
			lock (singleDatabases)
			{
				SingleFileCacheEntry entry;
				if (singleDatabases.TryGetValue (file, out entry)) {
					entry.AccessTime = DateTime.Now;
					return entry.Database;
				}
				else 
				{
					if (singleDatabases.Count >= MAX_SINGLEDB_CACHE_SIZE)
					{
						DateTime tim = DateTime.MaxValue;
						string toDelete = null;
						foreach (KeyValuePair<FilePath,SingleFileCacheEntry> pce in singleDatabases)
						{
							DateTime ptim = pce.Value.AccessTime;
							if (ptim < tim) {
								tim = ptim;
								toDelete = pce.Key;
							}
						}
						singleDatabases.Remove (toDelete);
					}

					
					ProjectDom db = ParserDatabase.LoadSingleFileDom (file);
					db.Uri = "File:" + file;
					db.UpdateReferences ();
					entry = new SingleFileCacheEntry ();
					entry.Database = db;
					entry.AccessTime = DateTime.Now;
					singleDatabases [file] = entry;
					db.ReferenceCount = 1;
					return db;
				}
			}
		}
        internal SimpleCodeCompletionDatabase GetSingleFileDatabase(string file)
        {
            lock (singleDatabases)
            {
                SingleFileCacheEntry entry = singleDatabases [file] as SingleFileCacheEntry;
                if (entry != null) {
                    entry.AccessTime = DateTime.Now;
                    return entry.Database;
                }
                else
                {
                    if (singleDatabases.Count >= MAX_SINGLEDB_CACHE_SIZE)
                    {
                        DateTime tim = DateTime.MaxValue;
                        string toDelete = null;
                        foreach (DictionaryEntry pce in singleDatabases)
                        {
                            DateTime ptim = ((SingleFileCacheEntry)pce.Value).AccessTime;
                            if (ptim < tim) {
                                tim = ptim;
                                toDelete = pce.Key.ToString();
                            }
                        }
                        singleDatabases.Remove (toDelete);
                    }

                    SimpleCodeCompletionDatabase db = new SimpleCodeCompletionDatabase (file, this);
                    entry = new SingleFileCacheEntry ();
                    entry.Database = db;
                    entry.AccessTime = DateTime.Now;
                    singleDatabases [file] = entry;
                    return db;
                }
            }
        }