// Token: 0x06006E22 RID: 28194 RVA: 0x0017AC2C File Offset: 0x00178E2C public IAsyncLocalValueMap Set(IAsyncLocal key, object value, bool treatNullValueAsNonexistent) { int count = base.Count; bool flag = base.ContainsKey(key); if (value != null || !treatNullValueAsNonexistent) { AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(count + (flag ? 0 : 1)); foreach (KeyValuePair <IAsyncLocal, object> keyValuePair in this) { manyElementAsyncLocalValueMap[keyValuePair.Key] = keyValuePair.Value; } manyElementAsyncLocalValueMap[key] = value; return(manyElementAsyncLocalValueMap); } if (!flag) { return(this); } if (count == 17) { AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(16); int num = 0; foreach (KeyValuePair <IAsyncLocal, object> keyValuePair2 in this) { if (key != keyValuePair2.Key) { multiElementAsyncLocalValueMap.UnsafeStore(num++, keyValuePair2.Key, keyValuePair2.Value); } } return(multiElementAsyncLocalValueMap); } AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap2 = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(count - 1); foreach (KeyValuePair <IAsyncLocal, object> keyValuePair3 in this) { if (key != keyValuePair3.Key) { manyElementAsyncLocalValueMap2[keyValuePair3.Key] = keyValuePair3.Value; } } return(manyElementAsyncLocalValueMap2); }
// Token: 0x06006E1B RID: 28187 RVA: 0x0017A6BC File Offset: 0x001788BC public IAsyncLocalValueMap Set(IAsyncLocal key, object value, bool treatNullValueAsNonexistent) { if (value != null || !treatNullValueAsNonexistent) { if (key == this._key1) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(key, value, this._key2, this._value2, this._key3, this._value3)); } if (key == this._key2) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._key1, this._value1, key, value, this._key3, this._value3)); } if (key == this._key3) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._key1, this._value1, this._key2, this._value2, key, value)); } AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(4); multiElementAsyncLocalValueMap.UnsafeStore(0, this._key1, this._value1); multiElementAsyncLocalValueMap.UnsafeStore(1, this._key2, this._value2); multiElementAsyncLocalValueMap.UnsafeStore(2, this._key3, this._value3); multiElementAsyncLocalValueMap.UnsafeStore(3, key, value); return(multiElementAsyncLocalValueMap); } else { if (key == this._key1) { return(new AsyncLocalValueMap.TwoElementAsyncLocalValueMap(this._key2, this._value2, this._key3, this._value3)); } if (key == this._key2) { return(new AsyncLocalValueMap.TwoElementAsyncLocalValueMap(this._key1, this._value1, this._key3, this._value3)); } if (key != this._key3) { return(this); } return(new AsyncLocalValueMap.TwoElementAsyncLocalValueMap(this._key1, this._value1, this._key2, this._value2)); } }
// Token: 0x06006E1F RID: 28191 RVA: 0x0017A880 File Offset: 0x00178A80 public IAsyncLocalValueMap Set(IAsyncLocal key, object value, bool treatNullValueAsNonexistent) { int i = 0; while (i < this._keyValues.Length) { if (key == this._keyValues[i].Key) { if (value != null || !treatNullValueAsNonexistent) { AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length); Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap._keyValues, 0, this._keyValues.Length); multiElementAsyncLocalValueMap._keyValues[i] = new KeyValuePair <IAsyncLocal, object>(key, value); return(multiElementAsyncLocalValueMap); } if (this._keyValues.Length != 4) { AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap2 = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length - 1); if (i != 0) { Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap2._keyValues, 0, i); } if (i != this._keyValues.Length - 1) { Array.Copy(this._keyValues, i + 1, multiElementAsyncLocalValueMap2._keyValues, i, this._keyValues.Length - i - 1); } return(multiElementAsyncLocalValueMap2); } if (i == 0) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[2].Key, this._keyValues[2].Value, this._keyValues[3].Key, this._keyValues[3].Value)); } if (i == 1) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[2].Key, this._keyValues[2].Value, this._keyValues[3].Key, this._keyValues[3].Value)); } if (i != 2) { return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[2].Key, this._keyValues[2].Value)); } return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[3].Key, this._keyValues[3].Value)); } else { i++; } } if (value == null && treatNullValueAsNonexistent) { return(this); } if (this._keyValues.Length < 16) { AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap3 = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length + 1); Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap3._keyValues, 0, this._keyValues.Length); multiElementAsyncLocalValueMap3._keyValues[this._keyValues.Length] = new KeyValuePair <IAsyncLocal, object>(key, value); return(multiElementAsyncLocalValueMap3); } AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(17); foreach (KeyValuePair <IAsyncLocal, object> keyValuePair in this._keyValues) { manyElementAsyncLocalValueMap[keyValuePair.Key] = keyValuePair.Value; } manyElementAsyncLocalValueMap[key] = value; return(manyElementAsyncLocalValueMap); }