BSUtil
Date: 2019-10-22

org.jmol.util

## Class BSUtil

- java.lang.Object
- - org.jmol.util.BSUtil

-     public final class BSUtil
      extends java.lang.Object

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static javajs.util.BS` | `emptySet`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BSUtil()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static javajs.util.BS` | `andNot(javajs.util.BS a, javajs.util.BS b)`
    `static boolean` | `areEqual(javajs.util.BS a, javajs.util.BS b)`
    `static int` | `cardinalityOf(javajs.util.BS bs)` cardinality = "total number of set bits"
    `static javajs.util.BS` | `copy(javajs.util.BS bs)`
    `static javajs.util.BS` | `copy2(javajs.util.BS a, javajs.util.BS b)`
    `static javajs.util.BS` | `copyInvert(javajs.util.BS bs, int n)`
    `static javajs.util.BS` | `deleteBits(javajs.util.BS bs, javajs.util.BS bsDelete)` this one slides deleted bits out of a pattern.
    `static boolean` | `haveCommon(javajs.util.BS a, javajs.util.BS b)`
    `static javajs.util.BS` | `invertInPlace(javajs.util.BS bs, int n)` inverts the bitset bits 0 through n-1, and returns a reference to the modified bitset
    `static javajs.util.BS` | `newAndSetBit(int i)`
    `static javajs.util.BS` | `newBitSet2(int i0, int i1)`
    `static void` | `offset(javajs.util.BS bs0, int pos, int offset)` offset the bitset in place by the specified number of bits starting at a given position
    `static javajs.util.BS` | `setAll(int n)`
    `static void` | `setMapBitSet(java.util.Map<java.lang.String,javajs.util.BS> ht, int i1, int i2, java.lang.String key)`
    `static void` | `shiftBits(javajs.util.BS bs, javajs.util.BS bsAdded, boolean setIfFound, int iLast)` this one slides bits to higher positions based on a pattern.
    `static javajs.util.BS` | `toggleInPlace(javajs.util.BS a, javajs.util.BS b)` 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.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### emptySet

          public static final javajs.util.BS emptySet

  - ### Constructor Detail

    - #### BSUtil

          public BSUtil()

  - ### Method Detail

    - #### newAndSetBit

          public static javajs.util.BS newAndSetBit(int i)

    - #### areEqual

          public static boolean areEqual(javajs.util.BS a,
                                         javajs.util.BS b)

    - #### haveCommon

          public static boolean haveCommon(javajs.util.BS a,
                                           javajs.util.BS b)

    - #### cardinalityOf

          public static int cardinalityOf(javajs.util.BS bs)

      cardinality = "total number of set bits"
      Parameters:
        `bs` -
      Returns:
        number of set bits

    - #### newBitSet2

          public static javajs.util.BS newBitSet2(int i0,
                                                  int i1)

    - #### setAll

          public static javajs.util.BS setAll(int n)

    - #### andNot

          public static javajs.util.BS andNot(javajs.util.BS a,
                                              javajs.util.BS b)

    - #### copy

          public static javajs.util.BS copy(javajs.util.BS bs)

    - #### copy2

          public static javajs.util.BS copy2(javajs.util.BS a,
                                             javajs.util.BS b)

    - #### copyInvert

          public static javajs.util.BS copyInvert(javajs.util.BS bs,
                                                  int n)

    - #### invertInPlace

          public static javajs.util.BS invertInPlace(javajs.util.BS bs,
                                                     int n)

      inverts the bitset bits 0 through n-1, and returns a reference to the modified bitset
      Parameters:
        `bs` -
        `n` -
      Returns:
        pointer to original bitset, now inverted

    - #### toggleInPlace

          public static javajs.util.BS toggleInPlace(javajs.util.BS a,
                                                     javajs.util.BS b)

      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.
      Parameters:
        `a` -
        `b` -
      Returns:
        a handy pointer to the working set, a

    - #### deleteBits

          public static javajs.util.BS deleteBits(javajs.util.BS bs,
                                                  javajs.util.BS bsDelete)

      this one slides deleted bits out of a pattern. deleteBits 101011b, 000011b --> 1010b Java 1.4, not 1.3
      Parameters:
        `bs` -
        `bsDelete` -
      Returns:
        shorter bitset

    - #### shiftBits

          public static void shiftBits(javajs.util.BS bs,
                                       javajs.util.BS bsAdded,
                                       boolean setIfFound,
                                       int iLast)

      this one slides bits to higher positions based on a pattern. shiftBits 101011b, 000011b --> 10101100b
      Parameters:
        `bs` -
        `bsAdded` -
        `setIfFound` -
        `iLast` -

    - #### offset

          public static void offset(javajs.util.BS bs0,
                                    int pos,
                                    int offset)

      offset the bitset in place by the specified number of bits starting at a given position
      Parameters:
        `bs0` -
        `pos` - starting position; no change before this
        `offset` -

    - #### setMapBitSet

          public static void setMapBitSet(java.util.Map<java.lang.String,javajs.util.BS> ht,
                                          int i1,
                                          int i2,
                                          java.lang.String key)