void LoadResourceValues(ResourceCacheItem[] store) { ResourceInfo ri; object value; lock (readerLock) { for (int i = 0; i < resourceCount; i++) { ri = infos [i]; if (ri.TypeIndex == -1) { store [i] = new ResourceCacheItem(ri.ResourceName, null); continue; } reader.BaseStream.Seek(ri.ValuePosition, SeekOrigin.Begin); if (resource_ver == 2) { value = ReadValueVer2(ri.TypeIndex); } else { value = ReadValueVer1(Type.GetType(typeNames [ri.TypeIndex], true)); } store [i] = new ResourceCacheItem(ri.ResourceName, value); } } }
public void Update() { List <string> delList = new List <string>(); foreach (KeyValuePair <string, List <ResourceCacheItem> > kv in cacheDict) { for (int i = kv.Value.Count; i >= 0; i--) { ResourceCacheItem item = kv.Value[i]; item.retainTime--; if (item.retainTime <= 0) { kv.Value.RemoveAt(i); loader.DeleteResource(kv.Key); if (kv.Value.Count == 0) { delList.Add(kv.Key); } } } } for (int i = 0; i < delList.Count; i++) { cacheDict.Remove(delList[i]); } }
public Object GetResource(string path) { List <ResourceCacheItem> objectList; if (cacheDict.TryGetValue(path, out objectList)) { if (objectList.Count > 0) { ResourceCacheItem obj = objectList[objectList.Count - 1]; objectList.RemoveAt(objectList.Count - 1); return(obj.obj); } } return(loader.GetResource(path)); }
void FillCache() { if (reader.cache != null) { return; } lock (reader.cache_lock) { if (reader.cache != null) { return; } ResourceCacheItem[] resources = new ResourceCacheItem [reader.resourceCount]; reader.LoadResourceValues(resources); reader.cache = resources; } }
public void DeleteResource(Object obj, string path) { ResourceCacheItem item = new ResourceCacheItem(); item.obj = obj; item.retainTime = 2; List <ResourceCacheItem> objectList; if (cacheDict.TryGetValue(path, out objectList)) { objectList.Add(item); } else { objectList = new List <ResourceCacheItem>(); objectList.Add(item); cacheDict.Add(path, objectList); } }
void FillCache () { if (reader.cache != null) return; lock (reader.cache_lock) { if (reader.cache != null) return; ResourceCacheItem[] resources = new ResourceCacheItem [reader.resourceCount]; reader.LoadResourceValues (resources); reader.cache = resources; } }
void LoadResourceValues (ResourceCacheItem[] store) { ResourceInfo ri; object value; lock (readerLock) { for (int i = 0; i < resourceCount; i++) { ri = infos [i]; if (ri.TypeIndex == -1) { store [i] = new ResourceCacheItem (ri.ResourceName, null); continue; } reader.BaseStream.Seek (ri.ValuePosition, SeekOrigin.Begin); if (resource_ver == 2) value = ReadValueVer2 (ri.TypeIndex); else value = ReadValueVer1 (Type.GetType (typeNames [ri.TypeIndex], true)); store [i] = new ResourceCacheItem (ri.ResourceName, value); } } }