using System; using System.Collections; namespace System.Text.RegularExpressions { // Token: 0x020002BF RID: 703 internal class FactoryCache { // Token: 0x0600199E RID: 6558 RVA: 0x0005B1C0 File Offset: 0x000593C0 public FactoryCache(int capacity) { this.capacity = capacity; this.factories = new Hashtable(capacity); this.mru_list = new MRUList(); } // Token: 0x0600199F RID: 6559 RVA: 0x0005B1F4 File Offset: 0x000593F4 public void Add(string pattern, RegexOptions options, IMachineFactory factory) { lock (this) { FactoryCache.Key key = new FactoryCache.Key(pattern, options); this.Cleanup(); this.factories[key] = factory; this.mru_list.Use(key); } } // Token: 0x060019A0 RID: 6560 RVA: 0x0005B258 File Offset: 0x00059458 private void Cleanup() { while (this.factories.Count >= this.capacity && this.capacity > 0) { object obj = this.mru_list.Evict(); if (obj != null) { this.factories.Remove((FactoryCache.Key)obj); } } } // Token: 0x060019A1 RID: 6561 RVA: 0x0005B2B0 File Offset: 0x000594B0 public IMachineFactory Lookup(string pattern, RegexOptions options) { lock (this) { FactoryCache.Key key = new FactoryCache.Key(pattern, options); if (this.factories.Contains(key)) { this.mru_list.Use(key); return (IMachineFactory)this.factories[key]; } } return null; } // Token: 0x17000800 RID: 2048 // (get) Token: 0x060019A2 RID: 6562 RVA: 0x0005B32C File Offset: 0x0005952C // (set) Token: 0x060019A3 RID: 6563 RVA: 0x0005B334 File Offset: 0x00059534 public int Capacity { get { return this.capacity; } set { lock (this) { this.capacity = value; this.Cleanup(); } } } // Token: 0x040014D4 RID: 5332 private int capacity; // Token: 0x040014D5 RID: 5333 private Hashtable factories; // Token: 0x040014D6 RID: 5334 private MRUList mru_list; // Token: 0x020002C0 RID: 704 private class Key { // Token: 0x060019A4 RID: 6564 RVA: 0x0005B380 File Offset: 0x00059580 public Key(string pattern, RegexOptions options) { this.pattern = pattern; this.options = options; } // Token: 0x060019A5 RID: 6565 RVA: 0x0005B398 File Offset: 0x00059598 public override int GetHashCode() { return this.pattern.GetHashCode() ^ (int)this.options; } // Token: 0x060019A6 RID: 6566 RVA: 0x0005B3AC File Offset: 0x000595AC public override bool Equals(object o) { if (o == null || !(o is FactoryCache.Key)) { return false; } FactoryCache.Key key = (FactoryCache.Key)o; return this.options == key.options && this.pattern.Equals(key.pattern); } // Token: 0x060019A7 RID: 6567 RVA: 0x0005B3F8 File Offset: 0x000595F8 public override string ToString() { return string.Concat(new object[] { "('", this.pattern, "', [", this.options, "])" }); } // Token: 0x040014D7 RID: 5335 public string pattern; // Token: 0x040014D8 RID: 5336 public RegexOptions options; } } }