コード例 #1
0
ファイル: IntIndex.cs プロジェクト: pawels17/MUTDOD
        public Guid[] FindObjects(IndexData indexData, Type OIDClass, bool complexExtension, out int?readedObjects)
        {
            int           ro;
            IntBinaryTree BT  = getStorageData(indexData);
            List <Guid>   ret = BT.GetObjectsFromBT(OIDClass, out ro);

            readedObjects = ro;

            if (complexExtension)
            {
                foreach (Type t in BT.GetObjectsTypesFromBT().Where(t => t != OIDClass))
                {
                    bool found    = false;
                    Type baseType = t.BaseType;
                    while (baseType != null && !found)
                    {
                        if (baseType == OIDClass)
                        {
                            ret.AddRange(BT.GetObjectsFromBT(OIDClass, out ro));
                            readedObjects += ro;
                            found          = true;
                        }
                        baseType = baseType.BaseType;
                    }
                }
            }

            return(ret.Distinct().ToArray());
        }
コード例 #2
0
ファイル: IntIndex.cs プロジェクト: pawels17/MUTDOD
        public Guid[] FindObjects(IndexData indexData, Type OIDClass, bool complexExtension, string[] attributes,
                                  object[] values, CompareType[] compareTypes, out int?readedObjects)
        {
            if (compareTypes.Count() != attributes.Count() || attributes.Count() != values.Count())
            {
                throw new ArgumentException(
                          "Liczności tbalic z atrybutami, porównaniami oraz wartościami musza być identyczne!");
            }

            readedObjects = 0;
            int           ro;
            IntBinaryTree BT  = getStorageData(indexData);
            List <Guid>   ret = null;

            for (int i = 0; i < attributes.Count(); i++)
            {
                List <Guid> foundOIDs = BT.GetObjectsFromBT(OIDClass, attributes[i], (int)values[i], compareTypes[i],
                                                            out ro);
                readedObjects += ro;

                if (complexExtension)
                {
                    foreach (Type t in BT.GetObjectsTypesFromBT().Where(t => t != OIDClass))
                    {
                        bool found    = false;
                        Type baseType = t.BaseType;
                        while (baseType != null && !found)
                        {
                            if (baseType == OIDClass)
                            {
                                foundOIDs.AddRange(BT.GetObjectsFromBT(OIDClass, attributes[i], (int)values[i],
                                                                       compareTypes[i], out ro));
                                readedObjects += ro;
                                found          = true;
                            }
                            baseType = baseType.BaseType;
                        }
                    }
                }

                if (ret == null)
                {
                    ret = foundOIDs.Distinct().ToList();
                }
                else
                {
                    ret =
                        ret.Intersect(foundOIDs.Distinct()).ToList();
                }
            }

            return(ret.ToArray());
        }
コード例 #3
0
ファイル: IntIndex.cs プロジェクト: pawels17/MUTDOD
        public Guid[] GetIndexedObjects(IndexData indexData, int?packageSize, int skipItemsCount)
        {
            IntBinaryTree BT = getStorageData(indexData);

            return(BT.GetObjectsFromBT());
        }