Here you can find the source of setBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end)
Parameter | Description |
---|---|
bitmap | array of words to be modified |
start | first index to be modified (inclusive) |
end | last index to be modified (exclusive) |
public static int setBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end)
//package com.java2s; /*/*from w w w .j a va 2 s .c om*/ * (c) the authors Licensed under the Apache License, Version 2.0. */ public class Main { /** * set bits at start, start+1,..., end-1 and report the * cardinality change * * @param bitmap array of words to be modified * @param start first index to be modified (inclusive) * @param end last index to be modified (exclusive) * @return cardinality change */ public static int setBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end) { int cardbefore = cardinalityInBitmapWordRange(bitmap, start, end); setBitmapRange(bitmap, start, end); int cardafter = cardinalityInBitmapWordRange(bitmap, start, end); return cardafter - cardbefore; } /** * Hamming weight of the 64-bit words involved in the range * start, start+1,..., end-1 * * @param bitmap array of words to be modified * @param start first index to be modified (inclusive) * @param end last index to be modified (exclusive) * @return the hamming weight */ public static int cardinalityInBitmapWordRange(long[] bitmap, int start, int end) { if (start == end) { return 0; } int firstword = start / 64; int endword = (end - 1) / 64; int answer = 0; for (int i = firstword; i <= endword; i++) { answer += Long.bitCount(bitmap[i]); } return answer; } /** * set bits at start, start+1,..., end-1 * * @param bitmap array of words to be modified * @param start first index to be modified (inclusive) * @param end last index to be modified (exclusive) */ public static void setBitmapRange(long[] bitmap, int start, int end) { if (start == end) { return; } int firstword = start / 64; int endword = (end - 1) / 64; if (firstword == endword) { bitmap[firstword] |= (~0L << start) & (~0L >>> -end); return; } bitmap[firstword] |= ~0L << start; for (int i = firstword + 1; i < endword; i++) { bitmap[i] = ~0L; } bitmap[endword] |= ~0L >>> -end; } }