private void CreateQueryWhitelists (ICollection search_subset_uris, LNS.IndexSearcher primary_searcher, LNS.IndexSearcher secondary_searcher, LNS.BooleanQuery primary_prohibited_part_query, LNS.BooleanQuery secondary_prohibited_part_query, out LuceneBitArray primary_whitelist, out LuceneBitArray secondary_whitelist) { primary_whitelist = null; secondary_whitelist = null; if (search_subset_uris != null && search_subset_uris.Count > 0) { primary_whitelist = new LuceneBitArray (primary_searcher); if (secondary_searcher != null) secondary_whitelist = new LuceneBitArray (secondary_searcher); foreach (Uri uri in search_subset_uris) { primary_whitelist.AddUri (uri); if (secondary_whitelist != null) secondary_whitelist.AddUri (uri); } primary_whitelist.FlushUris (); if (secondary_whitelist != null) secondary_whitelist.FlushUris (); } // Build blacklists from our prohibited parts. LuceneBitArray primary_blacklist = null; LuceneBitArray secondary_blacklist = null; if (primary_prohibited_part_query != null) { primary_blacklist = new LuceneBitArray (primary_searcher, primary_prohibited_part_query); if (secondary_searcher != null) { secondary_blacklist = new LuceneBitArray (secondary_searcher); if (secondary_prohibited_part_query != null) secondary_blacklist.Or (secondary_prohibited_part_query); primary_blacklist.Join (secondary_blacklist); } } // Combine our whitelist and blacklist into just a whitelist. if (primary_blacklist != null) { if (primary_whitelist == null) { primary_blacklist.Not (); primary_whitelist = primary_blacklist; } else { primary_whitelist.AndNot (primary_blacklist); } } if (secondary_blacklist != null) { if (secondary_whitelist == null) { secondary_blacklist.Not (); secondary_whitelist = secondary_blacklist; } else { secondary_whitelist.AndNot (secondary_blacklist); } } }