Java BitSet toggleInPlace(BitSet a, BitSet b)

Here you can find the source of toggleInPlace(BitSet a, BitSet b)

Description

a perhaps curious method: b is a reference set, perhaps all atoms in a certain molecule a is the working set, perhaps representing all displayed atoms For each set bit in b: a) if a is also set, then clear a's bit UNLESS b) if a is not set, then add to a all set bits of b Thus, if a equals b --> clear all if a is a subset of b, then --> b if b is a subset of a, then --> a not b if a only intersects with b, then --> a or b if a does not intersect with b, then a or b In "toggle" mode, when you click on any atom of the molecule, you want either: (a) all the atoms in the molecule to be displayed if not all are already displayed, or (b) the whole molecule to be hidden if all the atoms of the molecule are already displayed.

License

Open Source License

Parameter

Parameter Description
a a parameter
b a parameter

Return

a handy pointer to the working set, a

Declaration

public static BitSet toggleInPlace(BitSet a, BitSet b) 

Method Source Code


//package com.java2s;
/* $RCSfile$/*from w  w w  .ja  v  a 2s.c om*/
 * $Author: egonw $
 * $Date: 2005-11-10 09:52:44 -0600 (Thu, 10 Nov 2005) $
 * $Revision: 4255 $
 *
 * Copyright (C) 2003-2005  The Jmol Development Team
 *
 * Contact: jmol-developers@lists.sf.net
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 */

import java.util.BitSet;

public class Main {
    /**
     * a perhaps curious method:
     * 
     * b is a reference set, perhaps all atoms in a certain molecule a is the
     * working set, perhaps representing all displayed atoms
     * 
     * For each set bit in b: a) if a is also set, then clear a's bit UNLESS b) if
     * a is not set, then add to a all set bits of b
     * 
     * Thus, if a equals b --> clear all if a is a subset of b, then --> b if b is
     * a subset of a, then --> a not b if a only intersects with b, then --> a or
     * b if a does not intersect with b, then a or b
     * 
     * In "toggle" mode, when you click on any atom of the molecule, you want
     * either:
     * 
     * (a) all the atoms in the molecule to be displayed if not all are already
     * displayed, or
     * 
     * (b) the whole molecule to be hidden if all the atoms of the molecule are
     * already displayed.
     * 
     * @param a
     * @param b
     * @return a handy pointer to the working set, a
     */
    public static BitSet toggleInPlace(BitSet a, BitSet b) {
        if (a.equals(b)) {
            // all on -- toggle all off
            a.clear();
        } else if (andNot(copy(b), a).length() == 0) {
            // b is a subset of a -> remove all b bits from a
            andNot(a, b);
        } else {
            // may or may not be some overlap
            // combine a and b
            a.or(b);
        }
        return a;
    }

    public static BitSet andNot(BitSet a, BitSet b) {
        if (b != null)
            a.andNot(b);
        return a;
    }

    public static BitSet copy(BitSet bs) {
        return bs == null ? null : (BitSet) bs.clone();
    }

    public static BitSet copy(BitSet a, BitSet b) {
        if (a == null || b == null)
            return null;
        b.clear();
        b.or(a);
        return b;
    }
}

Related

  1. toByteArray(BitSet bits, int fixedNumBytes)
  2. toByteArray(BitSet bits, int sizeInBytes)
  3. toByteArray(BitSet bitSet)
  4. toByteArray(BitSet bs, int length)
  5. toFixedLengthByteArray(BitSet bs, int length)
  6. toInt(BitSet bitSet)
  7. toIntArray(final BitSet bits, final int size)
  8. toInteger(final BitSet bits)
  9. toLong(final BitSet value)