public void or(BitSet set)
    {
        if (this == set)
            return;
        
        int wordsInCommon = Math.min(wordsInUse, set.wordsInUse);
        
        if (wordsInUse < set.wordsInUse)
        {
            ensureCapacity(set.wordsInUse);
            wordsInUse = set.wordsInUse;
        }
        
        // Perform logical OR on words in common
        for (int i = 0; i < wordsInCommon; i++)
            words[i] |= set.words[i];
        
        // Copy any remaining words
        if (wordsInCommon < set.wordsInUse)
            System.arraycopy(set.words, wordsInCommon, words, wordsInCommon,
                    wordsInUse - wordsInCommon);
        
        // recalculateWordsInUse() is unnecessary
        checkInvariants();
    }