@Override
	public boolean addAll(IntSet c) {
		if (c == null || c.isEmpty() || this == c)
			return false;

		final FastSet other = convert(c);

		int wordsInCommon = Math.min(firstEmptyWord, other.firstEmptyWord);

		boolean modified = false;
		if (firstEmptyWord < other.firstEmptyWord) {
			modified = true;
			ensureCapacity(other.firstEmptyWord);
			firstEmptyWord = other.firstEmptyWord;
		}

		final int[] localWords = words; 			// faster
		final int[] localOtherWords = other.words; 	// faster

		// Perform logical OR on words in common
		for (int i = 0; i < wordsInCommon; i++) {
			int before = localWords[i];
			localWords[i] |= localOtherWords[i];
			modified = modified || before != localWords[i];
		}

		// Copy any remaining words
		if (wordsInCommon < other.firstEmptyWord) {
			modified = true;
			System.arraycopy(
					other.words, wordsInCommon, words, 
					wordsInCommon, firstEmptyWord - wordsInCommon);
		}
		if (modified)
			size = -1;
		return modified;
	}