2026-03-17 13:31:18 -07:00

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;
}
}
}