Esempio n. 1
0
                protected sealed override QueriedMemberList <M> Factory(string key)
                {
                    QueriedMemberList <M> result = QueriedMemberList <M> .Create(_type, key, ignoreCase : _ignoreCase);

                    result.Compact();
                    return(result);
                }
            //
            // Returns the cached result of a name-agnostic query on the Type's members, as if you'd passed in
            //
            //  BindingFlags == Public | NonPublic | Instance | Static | FlattenHierarchy  (immediateTypeOnly == false)
            //                  Public | NonPublic | Instance | Static | DeclaredOnly      (immediateTypeOnly == true)
            //
            public QueriedMemberList <M> GetQueriedMembers <M>(bool immediateTypeOnly) where M : MemberInfo
            {
                int    index  = MemberPolicies <M> .MemberTypeIndex;
                object result = Volatile.Read(ref _nameAgnosticQueryCaches[index]);

                if (result == null)
                {
                    QueriedMemberList <M> newResult = QueriedMemberList <M> .Create(_type, filter : null, ignoreCase : false, immediateTypeOnly : immediateTypeOnly);

                    newResult.Compact();
                    Volatile.Write(ref _nameAgnosticQueryCaches[index], newResult);
                    return(newResult);
                }
                QueriedMemberList <M> list = (QueriedMemberList <M>)result;

                if (list.ImmediateTypeOnly && !immediateTypeOnly)
                {
                    QueriedMemberList <M> newResult = QueriedMemberList <M> .Create(_type, filter : null, ignoreCase : false, immediateTypeOnly : false);

                    newResult.Compact();
                    Volatile.Write(ref _nameAgnosticQueryCaches[index], newResult);
                    return(newResult);
                }
                return(list);
            }
Esempio n. 3
0
            //
            // Returns the cached result of a name-agnostic query on the Type's members, as if you'd passed in
            //
            //  BindingFlags == Public | NonPublic | Instance | Static | FlattenHierarchy
            //
            public QueriedMemberList <M> GetQueriedMembers <M>() where M : MemberInfo
            {
                int    index  = MemberPolicies <M> .MemberTypeIndex;
                object result = Volatile.Read(ref _nameAgnosticQueryCaches[index]);

                if (result == null)
                {
                    QueriedMemberList <M> newResult = QueriedMemberList <M> .Create(_type, optionalNameFilter : null, ignoreCase : false);

                    newResult.Compact();
                    result = newResult;
                    Volatile.Write(ref _nameAgnosticQueryCaches[index], result);
                }

                Debug.Assert(result is QueriedMemberList <M>);
                return(Unsafe.As <QueriedMemberList <M> >(result));
            }