Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
            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;
            }
Beispiel #4
0
            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);
                    }
                }
            }