]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.impl/src/org/simantics/db/impl/TableHeader.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / TableHeader.java
1 package org.simantics.db.impl;\r
2 \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
19        getOffset();\r
20        getSize();\r
21        getCapacity();\r
22    }\r
23    final int getCapacity() {\r
24        int ret = header[CAPACITY_INDEX];\r
25        if(ret < 0) throw new IllegalStateException();\r
26        return ret;\r
27    }\r
28    final void setCapacity(int a) {\r
29        header[CAPACITY_INDEX] = a;\r
30    }\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
35        return ret;\r
36    }\r
37    final void setSize(int a) {\r
38        header[SIZE_INDEX] = a;\r
39    }\r
40    public final int getCount() {\r
41        return header[COUNT_INDEX];\r
42    }\r
43    final void setCount(int a) {\r
44        header[COUNT_INDEX] = a;\r
45    }\r
46    public final int getOffset() {\r
47        int ret = header[OFFSET_INDEX];\r
48        if(ret < -1) throw new IllegalStateException();\r
49        return ret; \r
50    }\r
51    final void setOffset(int a) {\r
52        header[OFFSET_INDEX] = a;\r
53    }\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
58    }\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
63    }\r
64 }