/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ /// <summary>Add (union) in a complete set. /// </summary> /// <param name="other">the set being added. /// </param> /// <returns>true if this changes the set. /// /// </returns> public virtual bool add(terminal_set other) { not_null(other); /* make a copy */ System.Collections.BitArray copy = (System.Collections.BitArray)_elements.Clone(); /* or in the other set */ //UPGRADE_NOTE: In .NET BitArrays must be of the same size to allow the 'System.Collections.BitArray.Or' operation. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1083"' _elements = _elements.Or(other._elements); /* changed if we are not the same as the copy */ //UPGRADE_TODO: method 'java.util.BitSet.equals' was converted to ' ' which has a different behavior. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1073_javautilBitSetequals_javalangObject"' return(!BitArraysEqual(_elements, copy)); // _elements.Equals(copy); }
internal virtual System.Collections.BitArray AddClause(BooleanQuery bq, System.Collections.BitArray result) { System.Collections.BitArray rnd = sets[r.Next(sets.Length)]; Query q = new ConstantScoreQuery(new AnonymousClassFilter(rnd, this)); bq.Add(q, BooleanClause.Occur.MUST); if (validate) { if (result == null) { result = (System.Collections.BitArray)rnd.Clone(); } else { result.And(rnd); } } return(result); }
/// <summary> Test if set A is contained in set B.</summary> /// <param name="A"> a bitSet /// </param> /// <param name="B"> a bitSet /// </param> /// <returns> true if A is contained in B /// </returns> private bool isContainedIn(System.Collections.BitArray A, System.Collections.BitArray B) { bool result = false; if (isEmpty(A)) { return(true); } System.Collections.BitArray setA = (System.Collections.BitArray)A.Clone(); //UPGRADE_NOTE: In .NET BitArrays must be of the same size to allow the 'System.Collections.BitArray.And' operation. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1083'" setA.And(B); //UPGRADE_TODO: Method 'java.util.BitSet.equals' was converted to 'System.Collections.BitArray.Equals' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilBitSetequals_javalangObject'" if (setA.Equals(A)) { result = true; } return(result); }
internal virtual void DoRandomSets(int maxSize, int iter, int mode) { System.Collections.BitArray a0 = null; OpenBitSet b0 = null; for (int i = 0; i < iter; i++) { int sz = rand.Next(maxSize); System.Collections.BitArray a = new System.Collections.BitArray(sz); OpenBitSet b = new OpenBitSet(sz); // test the various ways of setting bits if (sz > 0) { int nOper = rand.Next(sz); for (int j = 0; j < nOper; j++) { int idx; idx = rand.Next(sz); a.Set(idx, true); b.FastSet(idx); idx = rand.Next(sz); a.Set(idx, false); b.FastClear(idx); idx = rand.Next(sz); a.Set(idx, !a.Get(idx)); b.FastFlip(idx); bool val = b.FlipAndGet(idx); bool val2 = b.FlipAndGet(idx); Assert.IsTrue(val != val2); val = b.GetAndSet(idx); Assert.IsTrue(val2 == val); Assert.IsTrue(b.Get(idx)); if (!val) { b.FastClear(idx); } Assert.IsTrue(b.Get(idx) == val); } } // test that the various ways of accessing the bits are equivalent DoGet(a, b); // {{dougsale-2.4.0}} // // Java's java.util.BitSet automatically grows as needed - i.e., when a bit is referenced beyond // the size of the BitSet, an exception isn't thrown - rather, the set grows to the size of the // referenced bit. // // System.Collections.BitArray does not have this feature, and thus I've faked it here by // "growing" the array explicitly when necessary (creating a new instance of the appropriate size // and setting the appropriate bits). // // test ranges, including possible extension int fromIndex, toIndex; fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSets 'a' // and 'aa' to the same cardinality as 'j+1' when 'a.Count < j+1' and 'fromIndex < toIndex': //BitArray aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, !a.Get(j)); // So, if necessary, lets explicitly grow 'a' now; then 'a' and its clone, 'aa', will be of the required size. if (a.Length < toIndex && fromIndex < toIndex) { System.Collections.BitArray tmp = new System.Collections.BitArray(toIndex, false); for (int k = 0; k < a.Length; k++) { tmp.Set(k, a.Get(k)); } a = tmp; } // {{dougsale-2.4.0}}: now we can invoke this statement without going 'out-of-bounds' System.Collections.BitArray aa = (System.Collections.BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) { aa.Set(j, !a.Get(j)); } OpenBitSet bb = (OpenBitSet)b.Clone(); bb.Flip(fromIndex, toIndex); DoIterate(aa, bb, mode); // a problem here is from flip or doIterate fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSet 'aa' // when 'a.Count < j+1' and 'fromIndex < toIndex' //aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, false); // So, if necessary, lets explicitly grow 'aa' now if (a.Length < toIndex && fromIndex < toIndex) { aa = new System.Collections.BitArray(toIndex); for (int k = 0; k < a.Length; k++) { aa.Set(k, a.Get(k)); } } else { aa = (System.Collections.BitArray)a.Clone(); } for (int j = fromIndex; j < toIndex; j++) { aa.Set(j, false); } bb = (OpenBitSet)b.Clone(); bb.Clear(fromIndex, toIndex); DoNextSetBit(aa, bb); // a problem here is from clear() or nextSetBit fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSet 'aa' // when 'a.Count < j+1' and 'fromIndex < toIndex' //aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, false); // So, if necessary, lets explicitly grow 'aa' now if (a.Length < toIndex && fromIndex < toIndex) { aa = new System.Collections.BitArray(toIndex); for (int k = 0; k < a.Length; k++) { aa.Set(k, a.Get(k)); } } else { aa = (System.Collections.BitArray)a.Clone(); } for (int j = fromIndex; j < toIndex; j++) { aa.Set(j, true); } bb = (OpenBitSet)b.Clone(); bb.Set(fromIndex, toIndex); DoNextSetBit(aa, bb); // a problem here is from set() or nextSetBit if (a0 != null) { Assert.AreEqual(a.Equals(a0), b.Equals(b0)); Assert.AreEqual(BitSetSupport.Cardinality(a), b.Cardinality()); // {{dougsale-2.4.0}} // // The Java code used java.util.BitSet, which grows as needed. // When a bit, outside the dimension of the set is referenced, // the set automatically grows to the necessary size. The // new entries default to false. // // BitArray does not grow automatically and is not growable. // Thus when BitArray instances of mismatched cardinality // interact, we must first explicitly "grow" the smaller one. // // This growth is acheived by creating a new instance of the // required size and copying the appropriate values. // //BitArray a_and = (BitArray)a.Clone(); a_and.And(a0); //BitArray a_or = (BitArray)a.Clone(); a_or.Or(a0); //BitArray a_xor = (BitArray)a.Clone(); a_xor.Xor(a0); //BitArray a_andn = (BitArray)a.Clone(); for (int j = 0; j < a_andn.Count; j++) if (a0.Get(j)) a_andn.Set(j, false); System.Collections.BitArray a_and; System.Collections.BitArray a_or; System.Collections.BitArray a_xor; System.Collections.BitArray a_andn; if (a.Length < a0.Length) { // the Java code would have implicitly resized 'a_and', 'a_or', 'a_xor', and 'a_andn' // in this case, so we explicitly create a resized stand-in for 'a' here, allowing for // a to keep its original size while 'a_and', 'a_or', 'a_xor', and 'a_andn' are resized System.Collections.BitArray tmp = new System.Collections.BitArray(a0.Length, false); for (int z = 0; z < a.Length; z++) { tmp.Set(z, a.Get(z)); } a_and = (System.Collections.BitArray)tmp.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)tmp.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)tmp.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)tmp.Clone(); for (int j = 0; j < a_andn.Length; j++) { if (a0.Get(j)) { a_andn.Set(j, false); } } } else if (a.Length > a0.Length) { // the Java code would have implicitly resized 'a0' in this case, so // we explicitly do so here: System.Collections.BitArray tmp = new System.Collections.BitArray(a.Length, false); for (int z = 0; z < a0.Length; z++) { tmp.Set(z, a0.Get(z)); } a0 = tmp; a_and = (System.Collections.BitArray)a.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)a.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)a.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)a.Clone(); for (int j = 0; j < a_andn.Length; j++) { if (a0.Get(j)) { a_andn.Set(j, false); } } } else { // 'a' and 'a0' are the same size, no explicit growing necessary a_and = (System.Collections.BitArray)a.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)a.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)a.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)a.Clone(); for (int j = 0; j < a_andn.Length; j++) { if (a0.Get(j)) { a_andn.Set(j, false); } } } OpenBitSet b_and = (OpenBitSet)b.Clone(); Assert.AreEqual(b, b_and); b_and.And(b0); OpenBitSet b_or = (OpenBitSet)b.Clone(); b_or.Or(b0); OpenBitSet b_xor = (OpenBitSet)b.Clone(); b_xor.Xor(b0); OpenBitSet b_andn = (OpenBitSet)b.Clone(); b_andn.AndNot(b0); DoIterate(a_and, b_and, mode); DoIterate(a_or, b_or, mode); DoIterate(a_xor, b_xor, mode); DoIterate(a_andn, b_andn, mode); Assert.AreEqual(BitSetSupport.Cardinality(a_and), b_and.Cardinality()); Assert.AreEqual(BitSetSupport.Cardinality(a_or), b_or.Cardinality()); Assert.AreEqual(BitSetSupport.Cardinality(a_xor), b_xor.Cardinality()); Assert.AreEqual(BitSetSupport.Cardinality(a_andn), b_andn.Cardinality()); // test non-mutating popcounts Assert.AreEqual(b_and.Cardinality(), OpenBitSet.IntersectionCount(b, b0)); Assert.AreEqual(b_or.Cardinality(), OpenBitSet.UnionCount(b, b0)); Assert.AreEqual(b_xor.Cardinality(), OpenBitSet.XorCount(b, b0)); Assert.AreEqual(b_andn.Cardinality(), OpenBitSet.AndNotCount(b, b0)); } a0 = a; b0 = b; } }
internal virtual void DoRandomSets(int maxSize, int iter, int mode) { System.Collections.BitArray a0 = null; OpenBitSet b0 = null; for (int i = 0; i < iter; i++) { int sz = rand.Next(maxSize); System.Collections.BitArray a = new System.Collections.BitArray(sz); OpenBitSet b = new OpenBitSet(sz); // test the various ways of setting bits if (sz > 0) { int nOper = rand.Next(sz); for (int j = 0; j < nOper; j++) { int idx; idx = rand.Next(sz); a.Set(idx, true); b.FastSet(idx); idx = rand.Next(sz); a.Set(idx, false); b.FastClear(idx); idx = rand.Next(sz); a.Set(idx, !a.Get(idx)); b.FastFlip(idx); bool val = b.FlipAndGet(idx); bool val2 = b.FlipAndGet(idx); Assert.IsTrue(val != val2); val = b.GetAndSet(idx); Assert.IsTrue(val2 == val); Assert.IsTrue(b.Get(idx)); if (!val) b.FastClear(idx); Assert.IsTrue(b.Get(idx) == val); } } // test that the various ways of accessing the bits are equivalent DoGet(a, b); // {{dougsale-2.4.0}} // // Java's java.util.BitSet automatically grows as needed - i.e., when a bit is referenced beyond // the size of the BitSet, an exception isn't thrown - rather, the set grows to the size of the // referenced bit. // // System.Collections.BitArray does not have this feature, and thus I've faked it here by // "growing" the array explicitly when necessary (creating a new instance of the appropriate size // and setting the appropriate bits). // // test ranges, including possible extension int fromIndex, toIndex; fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSets 'a' // and 'aa' to the same cardinality as 'j+1' when 'a.Count < j+1' and 'fromIndex < toIndex': //BitArray aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, !a.Get(j)); // So, if necessary, lets explicitly grow 'a' now; then 'a' and its clone, 'aa', will be of the required size. if (a.Count < toIndex && fromIndex < toIndex) { System.Collections.BitArray tmp = new System.Collections.BitArray(toIndex, false); for (int k = 0; k < a.Count; k++) tmp.Set(k, a.Get(k)); a = tmp; } // {{dougsale-2.4.0}}: now we can invoke this statement without going 'out-of-bounds' System.Collections.BitArray aa = (System.Collections.BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, !a.Get(j)); OpenBitSet bb = (OpenBitSet)b.Clone(); bb.Flip(fromIndex, toIndex); DoIterate(aa, bb, mode); // a problem here is from flip or doIterate fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSet 'aa' // when 'a.Count < j+1' and 'fromIndex < toIndex' //aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, false); // So, if necessary, lets explicitly grow 'aa' now if (a.Count < toIndex && fromIndex < toIndex) { aa = new System.Collections.BitArray(toIndex); for (int k = 0; k < a.Count; k++) aa.Set(k, a.Get(k)); } else { aa = (System.Collections.BitArray)a.Clone(); } for (int j = fromIndex; j < toIndex; j++) aa.Set(j, false); bb = (OpenBitSet)b.Clone(); bb.Clear(fromIndex, toIndex); DoNextSetBit(aa, bb); // a problem here is from clear() or nextSetBit fromIndex = rand.Next(sz + 80); toIndex = fromIndex + rand.Next((sz >> 1) + 1); // {{dougsale-2.4.0}}: // The following commented-out, compound statement's 'for loop' implicitly grows the Java BitSet 'aa' // when 'a.Count < j+1' and 'fromIndex < toIndex' //aa = (BitArray)a.Clone(); for (int j = fromIndex; j < toIndex; j++) aa.Set(j, false); // So, if necessary, lets explicitly grow 'aa' now if (a.Count < toIndex && fromIndex < toIndex) { aa = new System.Collections.BitArray(toIndex); for (int k = 0; k < a.Count; k++) aa.Set(k, a.Get(k)); } else { aa = (System.Collections.BitArray)a.Clone(); } for (int j = fromIndex; j < toIndex; j++) aa.Set(j, true); bb = (OpenBitSet)b.Clone(); bb.Set(fromIndex, toIndex); DoNextSetBit(aa, bb); // a problem here is from set() or nextSetBit if (a0 != null) { Assert.AreEqual(a.Equals(a0), b.Equals(b0)); Assert.AreEqual(SupportClass.BitSetSupport.Cardinality(a), b.Cardinality()); // {{dougsale-2.4.0}} // // The Java code used java.util.BitSet, which grows as needed. // When a bit, outside the dimension of the set is referenced, // the set automatically grows to the necessary size. The // new entries default to false. // // BitArray does not grow automatically and is not growable. // Thus when BitArray instances of mismatched cardinality // interact, we must first explicitly "grow" the smaller one. // // This growth is acheived by creating a new instance of the // required size and copying the appropriate values. // //BitArray a_and = (BitArray)a.Clone(); a_and.And(a0); //BitArray a_or = (BitArray)a.Clone(); a_or.Or(a0); //BitArray a_xor = (BitArray)a.Clone(); a_xor.Xor(a0); //BitArray a_andn = (BitArray)a.Clone(); for (int j = 0; j < a_andn.Count; j++) if (a0.Get(j)) a_andn.Set(j, false); System.Collections.BitArray a_and; System.Collections.BitArray a_or; System.Collections.BitArray a_xor; System.Collections.BitArray a_andn; if (a.Count < a0.Count) { // the Java code would have implicitly resized 'a_and', 'a_or', 'a_xor', and 'a_andn' // in this case, so we explicitly create a resized stand-in for 'a' here, allowing for // a to keep its original size while 'a_and', 'a_or', 'a_xor', and 'a_andn' are resized System.Collections.BitArray tmp = new System.Collections.BitArray(a0.Count, false); for (int z = 0; z < a.Count; z++) tmp.Set(z, a.Get(z)); a_and = (System.Collections.BitArray)tmp.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)tmp.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)tmp.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)tmp.Clone(); for (int j = 0; j < a_andn.Count; j++) if (a0.Get(j)) a_andn.Set(j, false); } else if (a.Count > a0.Count) { // the Java code would have implicitly resized 'a0' in this case, so // we explicitly do so here: System.Collections.BitArray tmp = new System.Collections.BitArray(a.Count, false); for (int z = 0; z < a0.Count; z++) tmp.Set(z, a0.Get(z)); a0 = tmp; a_and = (System.Collections.BitArray)a.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)a.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)a.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)a.Clone(); for (int j = 0; j < a_andn.Count; j++) if (a0.Get(j)) a_andn.Set(j, false); } else { // 'a' and 'a0' are the same size, no explicit growing necessary a_and = (System.Collections.BitArray)a.Clone(); a_and.And(a0); a_or = (System.Collections.BitArray)a.Clone(); a_or.Or(a0); a_xor = (System.Collections.BitArray)a.Clone(); a_xor.Xor(a0); a_andn = (System.Collections.BitArray)a.Clone(); for (int j = 0; j < a_andn.Count; j++) if (a0.Get(j)) a_andn.Set(j, false); } OpenBitSet b_and = (OpenBitSet)b.Clone(); Assert.AreEqual(b, b_and); b_and.And(b0); OpenBitSet b_or = (OpenBitSet)b.Clone(); b_or.Or(b0); OpenBitSet b_xor = (OpenBitSet)b.Clone(); b_xor.Xor(b0); OpenBitSet b_andn = (OpenBitSet)b.Clone(); b_andn.AndNot(b0); DoIterate(a_and, b_and, mode); DoIterate(a_or, b_or, mode); DoIterate(a_xor, b_xor, mode); DoIterate(a_andn, b_andn, mode); Assert.AreEqual(SupportClass.BitSetSupport.Cardinality(a_and), b_and.Cardinality()); Assert.AreEqual(SupportClass.BitSetSupport.Cardinality(a_or), b_or.Cardinality()); Assert.AreEqual(SupportClass.BitSetSupport.Cardinality(a_xor), b_xor.Cardinality()); Assert.AreEqual(SupportClass.BitSetSupport.Cardinality(a_andn), b_andn.Cardinality()); // test non-mutating popcounts Assert.AreEqual(b_and.Cardinality(), OpenBitSet.IntersectionCount(b, b0)); Assert.AreEqual(b_or.Cardinality(), OpenBitSet.UnionCount(b, b0)); Assert.AreEqual(b_xor.Cardinality(), OpenBitSet.XorCount(b, b0)); Assert.AreEqual(b_andn.Cardinality(), OpenBitSet.AndNotCount(b, b0)); } a0 = a; b0 = b; } }
/// <summary> Parsing of the RGraph. This is the recursive method /// to perform a query. The method will recursively /// parse the RGraph thru connected nodes and visiting the /// RGraph using allowed adjacency relationship. /// /// </summary> /// <param name="traversed"> node already parsed /// </param> /// <param name="extension"> possible extension node (allowed neighbours) /// </param> /// <param name="forbiden"> node forbiden (set of node incompatible with the current solution) /// </param> private void parseRec(System.Collections.BitArray traversed, System.Collections.BitArray extension, System.Collections.BitArray forbidden) { System.Collections.BitArray newTraversed = null; System.Collections.BitArray newExtension = null; System.Collections.BitArray newForbidden = null; System.Collections.BitArray potentialNode = null; // if there is no more extension possible we // have reached a potential new solution if (isEmpty(extension)) { solution(traversed); } // carry on with each possible extension else { // calculates the set of nodes that may still // be reached at this stage (not forbiden) potentialNode = ((System.Collections.BitArray)graphBitSet.Clone()); potentialNode.And(forbidden.Not()); //UPGRADE_NOTE: In .NET BitArrays must be of the same size to allow the 'System.Collections.BitArray.Or' operation. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1083'" potentialNode.Or(traversed); // checks if we must continue the search // according to the potential node set if (mustContinue(potentialNode)) { // carry on research and update iteration count nbIteration++; // for each node in the set of possible extension (neighbours of // the current partial solution, include the node to the solution // and perse recursively the RGraph with the new context. for (int x = nextSetBit(extension, 0); x >= 0 && !stop; x = nextSetBit(extension, x + 1)) { // evaluates the new set of forbidden nodes // by including the nodes not compatible with the // newly accepted node. newForbidden = (System.Collections.BitArray)forbidden.Clone(); //UPGRADE_NOTE: In .NET BitArrays must be of the same size to allow the 'System.Collections.BitArray.Or' operation. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1083'" newForbidden.Or(((RNode)graph[x]).forbidden); // if it is the first time we are here then // traversed is empty and we initialize the set of // possible extensions to the extension of the first // accepted node in the solution. if (isEmpty(traversed)) { newExtension = (System.Collections.BitArray)(((RNode)graph[x]).extension.Clone()); } // else we simply update the set of solution by // including the neighbours of the newly accepted node else { newExtension = (System.Collections.BitArray)extension.Clone(); //UPGRADE_NOTE: In .NET BitArrays must be of the same size to allow the 'System.Collections.BitArray.Or' operation. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1083'" newExtension.Or(((RNode)graph[x]).extension); } // extension my not contain forbidden nodes newExtension.And(newForbidden.Not()); // create the new set of traversed node // (update current partial solution) // and add x to the set of forbidden node // (a node may only appear once in a solution) newTraversed = (System.Collections.BitArray)traversed.Clone(); SupportClass.BitArraySupport.Set(newTraversed, x); SupportClass.BitArraySupport.Set(forbidden, x); // parse recursively the RGraph parseRec(newTraversed, newExtension, newForbidden); } } } }
static void Main(string[] args) { #region https://youtu.be/_UtKEYYhi24 Coleccion show = new Coleccion(); System.Collections.BitArray bitArray = new System.Collections.BitArray( new byte[] { 1, 2, 4, 8, 16 });// Convertiendo byte a bit CountElement.Count(bitArray); Coleccion.Show(bitArray, 2); //// Obtenemos un bit en particular System.Console.WriteLine(bitArray.Get(3)); //// ponemos un bit en particular bitArray.Set(3, true); System.Console.WriteLine(bitArray.Get(3)); Coleccion.Show(bitArray, 2); //https://youtu.be/pGS78ttnqfY // Clonacion del BitArray System.Collections.BitArray bitArray2 = (System.Collections.BitArray)bitArray.Clone(); //// Invertir el Array, NOT bitArray2.Not(); Coleccion.Show(bitArray2, 2); // Creando otro Array System.Collections.BitArray bitArray3 = new System.Collections.BitArray(new byte[] { 5, 7, 9, 13, 15 }); Coleccion.Show(bitArray3, 2, "3°Array"); //// Hacemos Or entre Arreglos bitArray3.Or(bitArray); // El resultado se guarda en el Array que llevo //acabo la invocacion. Coleccion.Show(bitArray, pNombre: "1°Array"); Coleccion.Show(bitArray3, 3, pNombre: "Result"); System.Console.WriteLine("=|||||||||="); //// Hacemos AND entre Array Coleccion.Show(bitArray, pNombre: "1°Array"); Coleccion.Show(bitArray3, pNombre: "3°Array"); // Hacemos el AND, BitArray 3 se modifica con el resultado bitArray3.And(bitArray); Coleccion.Show(bitArray3, 3, "Result"); System.Console.WriteLine("=&&&&&&&&&&&="); //// Hamos XOR entre Array bitArray3 = new System.Collections.BitArray(new byte[] { 5, 7, 9, 13, 21 }); Coleccion.Show(bitArray, pNombre: "1°Array"); Coleccion.Show(bitArray3, pNombre: "3°Array"); // Hacemos el XOR, Array 3 se modifica con el resultado bitArray3.Xor(bitArray); Coleccion.Show(bitArray3, pNombre: "Result"); System.Console.ReadKey(); #endregion }