示例#1
0
        public void MultiThreaded()
        {
            var all = new List <my>();
            var set = new FiniteSetLookup <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);
        }
示例#2
0
        public void SingleThreaded()
        {
            var all = new List <my>();
            var set = new FiniteSetLookup <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);
        }
示例#3
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 FiniteSetLookup <string, FieldAttribute>(findFieldAttributeFor, StringComparer.InvariantCultureIgnoreCase);
                m_GetOnly          = info.GetBoolean("gof");

                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);
                        m_MemberSet  = makeSetterLambda(m_MemberInfo);
                    }
                }
            }
示例#4
0
            //common constructor body
            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_GetOnly          = memberInfo != null && !memberInfo.CanWrite;
                m_Attrs            = new List <FieldAttribute>(attrs);
                m_TargetAttrsCache = new FiniteSetLookup <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());

                //Set and compile setter
                if (memberInfo != null)
                {
                    m_MemberInfo = memberInfo;
                    if (!m_GetOnly)//if it has a setter
                    {
                        m_MemberSet = makeSetterLambda(memberInfo);
                    }
                }

                if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>))
                {
                    m_NonNullableType = type.GetGenericArguments()[0];
                }
                else
                {
                    m_NonNullableType = type;
                }

                m_AnyTargetKey = this[null].Key;
            }
示例#5
0
        protected override bool DoApplicationAfterInit()
        {
            m_ServerNode = new Node(ServerNode.NonBlank(nameof(ServerNode)))
                           .IsTrue(v => v.Binding.IsOneOf(MongoClient.MONGO_BINDING, MongoClient.APPLIANCE_BINDING), nameof(ServerNode));

            m_Client = App.GetDefaultMongoClient();

            m_DbMap = new FiniteSetLookup <Atom, Database>(ns => {
                var server = m_Client[m_ServerNode];
                var db     = server[DB_PREFIX + ns];
                return(db);
            });

            return(base.DoApplicationAfterInit());
        }