1 package org.simantics.db.impl;
\r
3 public class TableHeader {
\r
4 public static final int HEADER_SIZE = 4;
\r
5 public static final int EXTRA_SIZE = 4;
\r
6 private final int CAPACITY_INDEX; // Max size of memory than can be used for entries. (Table size without header.)
\r
7 private final int SIZE_INDEX; // Memory used for entries.
\r
8 private final int COUNT_INDEX; // Number of elements.
\r
9 private final int OFFSET_INDEX; // Table offset in containing vector minus zero shift.
\r
10 private final int EXTRA_INDEX; // Extra header fields for clients.
\r
11 private int[] header;
\r
12 TableHeader(int[] header, int headerBase) {
\r
13 this.CAPACITY_INDEX = headerBase++;
\r
14 this.SIZE_INDEX = headerBase++;
\r
15 this.COUNT_INDEX = headerBase++;
\r
16 this.OFFSET_INDEX = headerBase++;
\r
17 this.EXTRA_INDEX = headerBase++;
\r
18 this.header = header;
\r
23 final int getCapacity() {
\r
24 int ret = header[CAPACITY_INDEX];
\r
25 if(ret < 0) throw new IllegalStateException();
\r
28 final void setCapacity(int a) {
\r
29 header[CAPACITY_INDEX] = a;
\r
31 final int getSize() {
\r
32 int ret = header[SIZE_INDEX];
\r
33 if(ret < 0) throw new IllegalStateException();
\r
34 if(ret > getCapacity()) throw new IllegalStateException();
\r
37 final void setSize(int a) {
\r
38 header[SIZE_INDEX] = a;
\r
40 public final int getCount() {
\r
41 return header[COUNT_INDEX];
\r
43 final void setCount(int a) {
\r
44 header[COUNT_INDEX] = a;
\r
46 public final int getOffset() {
\r
47 int ret = header[OFFSET_INDEX];
\r
48 if(ret < -1) throw new IllegalStateException();
\r
51 final void setOffset(int a) {
\r
52 header[OFFSET_INDEX] = a;
\r
54 final int getExtra(int index) {
\r
55 if (index < 0 || index >= EXTRA_SIZE)
\r
56 throw new IllegalArgumentException();
\r
57 return header[EXTRA_INDEX + index];
\r
59 final void setExtra(int index, int a) {
\r
60 if (index < 0 || index >= EXTRA_SIZE)
\r
61 throw new IllegalArgumentException();
\r
62 header[EXTRA_INDEX + index] = a;
\r