173 lines
4.3 KiB
Java
173 lines
4.3 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package com.tridium.alarm.db.file;
|
|
|
|
public class FreePageMap {
|
|
private static final int[] BIT_MASKS = new int[]{1, 2, 4, 8, 16, 32, 64, 128};
|
|
private int pageCount = 0;
|
|
private byte[] pageMask = null;
|
|
|
|
public int getPageCount() {
|
|
return this.pageCount;
|
|
}
|
|
|
|
public int getFreeCount() {
|
|
int n;
|
|
int n2;
|
|
byte by;
|
|
if (this.pageCount == 0) {
|
|
return 0;
|
|
}
|
|
int n3 = 0;
|
|
int n4 = 0;
|
|
while (n4 < this.pageMask.length - 1) {
|
|
by = this.pageMask[n4];
|
|
n2 = 1;
|
|
n = 0;
|
|
while (n < 8) {
|
|
if ((by & n2) == 0) {
|
|
++n3;
|
|
}
|
|
n2 <<= 1;
|
|
++n;
|
|
}
|
|
++n4;
|
|
}
|
|
n4 = this.pageCount - (this.pageMask.length - 1) * 8;
|
|
by = this.pageMask[this.pageMask.length - 1];
|
|
n2 = 1;
|
|
n = 0;
|
|
while (n < n4) {
|
|
if ((by & n2) == 0) {
|
|
++n3;
|
|
}
|
|
n2 <<= 1;
|
|
++n;
|
|
}
|
|
return n3;
|
|
}
|
|
|
|
public int getFreePage() {
|
|
if (this.pageCount != 0) {
|
|
int n = this.pageMask.length;
|
|
int n2 = 0;
|
|
while (n2 < n) {
|
|
if ((this.pageMask[n2] & 0xFF ^ 0xFF) != 0) {
|
|
int n3 = 1;
|
|
int n4 = 0;
|
|
while (n4 < 8) {
|
|
if ((this.pageMask[n2] & 0xFF & n3) == 0) {
|
|
return n2 * 8 + n4;
|
|
}
|
|
n3 <<= 1;
|
|
++n4;
|
|
}
|
|
}
|
|
++n2;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public boolean isFree(int n) {
|
|
int n2 = n / 8;
|
|
if (n2 >= this.pageCount) {
|
|
throw new ArrayIndexOutOfBoundsException();
|
|
}
|
|
boolean bl = false;
|
|
if ((this.pageMask[n2] & BIT_MASKS[n - n2 * 8]) == 0) {
|
|
bl = true;
|
|
}
|
|
return bl;
|
|
}
|
|
|
|
public void setFree(int n, boolean bl) {
|
|
if (n >= this.pageCount) {
|
|
this.addFreePages(n - this.pageCount + 1);
|
|
}
|
|
int n2 = n / 8;
|
|
int n3 = BIT_MASKS[n - n2 * 8];
|
|
this.pageMask[n2] = bl ? (byte)(this.pageMask[n2] & ~n3) : (byte)(this.pageMask[n2] | n3);
|
|
}
|
|
|
|
public void addFreePages(int n) {
|
|
int n2;
|
|
if (n < 0) {
|
|
throw new IllegalArgumentException("Invalid add count: " + n);
|
|
}
|
|
if (this.pageMask == null) {
|
|
int n3 = n / 8;
|
|
if (n % 8 != 0) {
|
|
++n3;
|
|
}
|
|
this.pageMask = new byte[n3];
|
|
this.pageCount = n;
|
|
return;
|
|
}
|
|
int n4 = this.pageMask.length * 8;
|
|
int n5 = n4 - this.pageCount;
|
|
if (n5 != 0) {
|
|
n2 = n5 > n ? n : n5;
|
|
this.pageCount += n2;
|
|
n -= n2;
|
|
}
|
|
if (n == 0) {
|
|
return;
|
|
}
|
|
n2 = n / 8;
|
|
if (n % 8 != 0) {
|
|
++n2;
|
|
}
|
|
int n6 = this.pageMask.length;
|
|
byte[] byArray = new byte[n6 + n2];
|
|
System.arraycopy(this.pageMask, 0, byArray, 0, n6);
|
|
this.pageMask = byArray;
|
|
this.pageCount += n;
|
|
}
|
|
|
|
public int getSizeInBytes() {
|
|
return this.pageMask.length;
|
|
}
|
|
|
|
public void dump() {
|
|
int n;
|
|
int n2;
|
|
byte by;
|
|
if (this.pageCount == 0) {
|
|
return;
|
|
}
|
|
int n3 = 0;
|
|
int n4 = 0;
|
|
while (n4 < this.pageMask.length - 1) {
|
|
by = this.pageMask[n4];
|
|
n2 = 1;
|
|
n = 0;
|
|
while (n < 8) {
|
|
if ((by & n2) == 0) {
|
|
System.out.println(n3++ + ") free");
|
|
} else {
|
|
System.out.println(n3++ + ") in use");
|
|
}
|
|
n2 <<= 1;
|
|
++n;
|
|
}
|
|
++n4;
|
|
}
|
|
n4 = this.pageCount - (this.pageMask.length - 1) * 8;
|
|
by = this.pageMask[this.pageMask.length - 1];
|
|
n2 = 1;
|
|
n = 0;
|
|
while (n < n4) {
|
|
if ((by & n2) == 0) {
|
|
System.out.println(n3++ + ") free");
|
|
} else {
|
|
System.out.println(n3++ + ") in use");
|
|
}
|
|
n2 <<= 1;
|
|
++n;
|
|
}
|
|
}
|
|
}
|
|
|