public void MultiThreaded() { var all = new List <my>(); var set = new ConstrainedSetLookup <int, my>(k => { var v = new my { Tag = k }; all.Add(v); return(v); }); Parallel.For(0, 1000, i => { var key = i % 7; var got = set[key]; Aver.AreEqual(key, got.Tag); }); Aver.AreEqual(7, all.Count); Aver.AreEqual(7, set.Count); var deleted = 0; Parallel.For(0, 1000, i => { var key = i % 5; if (set.Remove(key)) { Interlocked.Increment(ref deleted); } }); Aver.AreEqual(2, set.Count); Aver.AreEqual(5, deleted); }
public void SingleThreaded() { var all = new List <my>(); var set = new ConstrainedSetLookup <int, my>(k => { var v = new my { Tag = k }; all.Add(v); return(v); }); for (var i = 0; i < 1000; i++) { var key = i % 7; var got = set[key]; Aver.AreEqual(key, got.Tag); } Aver.AreEqual(7, all.Count); Aver.AreEqual(7, set.Count); var deleted = 0; for (var i = 0; i < 1000; i++) { var key = i % 5; if (set.Remove(key)) { deleted++; } } Aver.AreEqual(2, set.Count); Aver.AreEqual(5, deleted); }
private void ctor(string name, int order, Type type, IEnumerable <FieldAttribute> attrs, PropertyInfo memberInfo = null) { if (name.IsNullOrWhiteSpace() || type == null || attrs == null) { throw new DataException(StringConsts.ARGUMENT_ERROR + "FieldDef.ctor(..null..)"); } m_Name = name; m_Order = order; m_Type = type; m_Attrs = new List <FieldAttribute>(attrs); m_TargetAttrsCache = new ConstrainedSetLookup <string, FieldAttribute>(findFieldAttributeFor, StringComparer.InvariantCultureIgnoreCase); if (m_Attrs.Count < 1) { throw new DataException(StringConsts.CRUD_FIELDDEF_ATTR_MISSING_ERROR.Args(name)); } //add ANY_TARGET attribute if (!m_Attrs.Any(a => a.TargetName == TargetedAttribute.ANY_TARGET)) { var isAnyKey = m_Attrs.Any(a => a.Key); var ata = new FieldAttribute(FieldAttribute.ANY_TARGET, key: isAnyKey); m_Attrs.Add(ata); } m_Attrs.ForEach(a => a.Seal()); m_MemberInfo = memberInfo; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { m_NonNullableType = type.GetGenericArguments()[0]; } else { m_NonNullableType = type; } m_AnyTargetKey = this[null].Key; }
private FieldDef(SerializationInfo info, StreamingContext context) { m_Name = info.GetString("nm"); m_Order = info.GetInt32("o"); m_Type = Type.GetType(info.GetString("t"), true); m_NonNullableType = Type.GetType(info.GetString("nnt"), true); m_Attrs = info.GetValue("attrs", typeof(List <FieldAttribute>)) as List <FieldAttribute>; m_AnyTargetKey = info.GetBoolean("atk"); m_TargetAttrsCache = new ConstrainedSetLookup <string, FieldAttribute>(findFieldAttributeFor, StringComparer.InvariantCultureIgnoreCase); var mtp = info.GetString("mtp"); if (mtp != null) { var tp = Type.GetType(mtp, true); var mn = info.GetString("mn"); if (mn != null) { m_MemberInfo = tp.GetProperty(mn); } } }