예제 #1
0
        /// <summary>
        /// A generic function for merging a list from the different adapters.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listType"></param>
        /// <returns></returns>
        private IList <T> GetMergedList <T>(AdapterListType listType)
        {
            int numberOfItems = 0;

            //Get the combined count of the different lists to allocate list capacity
            foreach (IRuleBaseAdapter adapter in m_Adapters)
            {
                adapter.Binder = m_Binder;
                numberOfItems += GetAdaptersList <T>(adapter, listType).Count;
            }

            //create the merged lists
            var mergedFacts = new List <T>(numberOfItems);

            //for each adapter merge the lists
            foreach (IRuleBaseAdapter adapter in m_Adapters)
            {
                mergedFacts.AddRange(GetAdaptersList <T>(adapter, listType));
            }

            //Assign the merged lists
            return(mergedFacts.AsReadOnly());
        }
예제 #2
0
        /// <summary>
        /// Get a specific list type from an adapter.
        /// </summary>
        /// <typeparam name="T">Type of the list to return</typeparam>
        /// <param name="adapter">adapter to return the list from</param>
        /// <param name="listType"></param>
        /// <returns></returns>
        private IList <T> GetAdaptersList <T>(IRuleBaseAdapter adapter, AdapterListType listType)
        {
            switch (listType)
            {
            case AdapterListType.Fact:
                return((IList <T>)adapter.Facts);

            case AdapterListType.Implication:
                return((IList <T>)adapter.Implications);

            case AdapterListType.Query:
                return((IList <T>)adapter.Queries);
            }

            IExtendedRuleBaseAdapter extendedAdapter = adapter as IExtendedRuleBaseAdapter;

            if (adapter != null)
            {
                switch (listType)
                {
                case AdapterListType.Retraction:
                    return((IList <T>)extendedAdapter.Retractions);

                case AdapterListType.IntegrityQuery:
                    return((IList <T>)extendedAdapter.IntegrityQueries);

                case AdapterListType.Equivalent:
                    return((IList <T>)extendedAdapter.Equivalents);

                case AdapterListType.Assertion:
                    return((IList <T>)extendedAdapter.Assertions);
                }
            }

            return(new List <T>(0));
        }
예제 #3
0
        /// <summary>
        /// Get a specific list type from an adapter.
        /// </summary>
        /// <typeparam name="T">Type of the list to return</typeparam>
        /// <param name="adapter">adapter to return the list from</param>
        /// <param name="listType"></param>
        /// <returns></returns>
        private IList <T> GetAdaptersList <T>(IRuleBaseAdapter adapter, AdapterListType listType)
        {
            switch (listType)
            {
            case AdapterListType.Fact:
                return((IList <T>)adapter.Facts);

            case AdapterListType.Implication:
                return((IList <T>)adapter.Implications);

            case AdapterListType.Query:
                return((IList <T>)adapter.Queries);

            case AdapterListType.Assertion:
                break;

            case AdapterListType.Retraction:
                break;

            case AdapterListType.Equivalent:
                break;

            case AdapterListType.IntegrityQuery:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(listType), listType, null);
            }

            var extendedAdapter = adapter as IExtendedRuleBaseAdapter;

            if (adapter == null)
            {
                return(new List <T>(0));
            }
            switch (listType)
            {
            case AdapterListType.Retraction:
                return((IList <T>)extendedAdapter.Retractions);

            case AdapterListType.IntegrityQuery:
                return((IList <T>)extendedAdapter.IntegrityQueries);

            case AdapterListType.Equivalent:
                return((IList <T>)extendedAdapter.Equivalents);

            case AdapterListType.Assertion:
                return((IList <T>)extendedAdapter.Assertions);

            case AdapterListType.Fact:
                break;

            case AdapterListType.Query:
                break;

            case AdapterListType.Implication:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(listType), listType, null);
            }

            return(new List <T>(0));
        }