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()); }
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()); }
public Guid[] GetIndexedObjects(IndexData indexData, int?packageSize, int skipItemsCount) { IntBinaryTree BT = getStorageData(indexData); return(BT.GetObjectsFromBT()); }