public FileIOAccess Intersect( FileIOAccess operand ) { if (operand == null) { return null; } Contract.Assert( this.m_pathDiscovery == operand.m_pathDiscovery, "Path discovery settings must match" ); if (this.m_allFiles) { if (operand.m_allFiles) { return new FileIOAccess( true, false, this.m_pathDiscovery ); } else { return new FileIOAccess( operand.m_set.Copy(), false, operand.m_allLocalFiles, this.m_pathDiscovery ); } } else if (operand.m_allFiles) { return new FileIOAccess( this.m_set.Copy(), false, this.m_allLocalFiles, this.m_pathDiscovery ); } StringExpressionSet intersectionSet = new StringExpressionSet( m_ignoreCase, true ); if (this.m_allLocalFiles) { String[] expressions = operand.m_set.UnsafeToStringArray(); if (expressions != null) { for (int i = 0; i < expressions.Length; ++i) { String root = GetRoot( expressions[i] ); if (root != null && IsLocalDrive( GetRoot( root ) ) ) { intersectionSet.AddExpressions( new String[] { expressions[i] }, true, false ); } } } } if (operand.m_allLocalFiles) { String[] expressions = this.m_set.UnsafeToStringArray(); if (expressions != null) { for (int i = 0; i < expressions.Length; ++i) { String root = GetRoot( expressions[i] ); if (root != null && IsLocalDrive(GetRoot(root))) { intersectionSet.AddExpressions( new String[] { expressions[i] }, true, false ); } } } } String[] regularIntersection = this.m_set.Intersect( operand.m_set ).UnsafeToStringArray(); if (regularIntersection != null) intersectionSet.AddExpressions( regularIntersection, !intersectionSet.IsEmpty(), false ); return new FileIOAccess( intersectionSet, false, this.m_allLocalFiles && operand.m_allLocalFiles, this.m_pathDiscovery ); }
public FileIOAccess Intersect(FileIOAccess operand) { if (operand == null) { return null; } if (this.m_allFiles) { if (operand.m_allFiles) { return new FileIOAccess(true, false, this.m_pathDiscovery); } return new FileIOAccess(operand.m_set.Copy(), false, operand.m_allLocalFiles, this.m_pathDiscovery); } if (operand.m_allFiles) { return new FileIOAccess(this.m_set.Copy(), false, this.m_allLocalFiles, this.m_pathDiscovery); } StringExpressionSet set = new StringExpressionSet(this.m_ignoreCase, true); if (this.m_allLocalFiles) { string[] strArray = operand.m_set.ToStringArray(); if (strArray != null) { for (int i = 0; i < strArray.Length; i++) { string root = GetRoot(strArray[i]); if ((root != null) && IsLocalDrive(GetRoot(root))) { set.AddExpressions(new string[] { strArray[i] }, true, false); } } } } if (operand.m_allLocalFiles) { string[] strArray2 = this.m_set.ToStringArray(); if (strArray2 != null) { for (int j = 0; j < strArray2.Length; j++) { string path = GetRoot(strArray2[j]); if ((path != null) && IsLocalDrive(GetRoot(path))) { set.AddExpressions(new string[] { strArray2[j] }, true, false); } } } } string[] strArray3 = this.m_set.Intersect(operand.m_set).ToStringArray(); if (strArray3 != null) { set.AddExpressions(strArray3, !set.IsEmpty(), false); } return new FileIOAccess(set, false, this.m_allLocalFiles && operand.m_allLocalFiles, this.m_pathDiscovery); }