]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/TableHeader.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/TableHeader.java
new file mode 100644 (file)
index 0000000..e0b8548
--- /dev/null
@@ -0,0 +1,64 @@
+package org.simantics.db.impl;\r
+\r
+public class TableHeader  {\r
+    public static final int HEADER_SIZE = 4;\r
+    public static final int EXTRA_SIZE = 4;\r
+    private final int CAPACITY_INDEX; // Max size of memory than can be used for entries. (Table size without header.)\r
+    private final int SIZE_INDEX; // Memory used for entries.\r
+    private final int COUNT_INDEX; // Number of elements.\r
+    private final int OFFSET_INDEX; // Table offset in containing vector minus zero shift.\r
+    private final int EXTRA_INDEX; // Extra header fields for clients.\r
+    private int[] header;\r
+   TableHeader(int[] header, int headerBase) {\r
+       this.CAPACITY_INDEX = headerBase++;\r
+       this.SIZE_INDEX = headerBase++;\r
+       this.COUNT_INDEX = headerBase++;\r
+       this.OFFSET_INDEX = headerBase++;\r
+       this.EXTRA_INDEX = headerBase++;\r
+       this.header = header;\r
+       getOffset();\r
+       getSize();\r
+       getCapacity();\r
+   }\r
+   final int getCapacity() {\r
+       int ret = header[CAPACITY_INDEX];\r
+       if(ret < 0) throw new IllegalStateException();\r
+       return ret;\r
+   }\r
+   final void setCapacity(int a) {\r
+       header[CAPACITY_INDEX] = a;\r
+   }\r
+   final int getSize() {\r
+       int ret = header[SIZE_INDEX];\r
+       if(ret < 0) throw new IllegalStateException();\r
+       if(ret > getCapacity()) throw new IllegalStateException();\r
+       return ret;\r
+   }\r
+   final void setSize(int a) {\r
+       header[SIZE_INDEX] = a;\r
+   }\r
+   public final int getCount() {\r
+       return header[COUNT_INDEX];\r
+   }\r
+   final void setCount(int a) {\r
+       header[COUNT_INDEX] = a;\r
+   }\r
+   public final int getOffset() {\r
+       int ret = header[OFFSET_INDEX];\r
+       if(ret < -1) throw new IllegalStateException();\r
+       return ret; \r
+   }\r
+   final void setOffset(int a) {\r
+       header[OFFSET_INDEX] = a;\r
+   }\r
+   final int getExtra(int index) {\r
+       if (index < 0 || index >= EXTRA_SIZE)\r
+           throw new IllegalArgumentException();\r
+       return header[EXTRA_INDEX + index];\r
+   }\r
+   final void setExtra(int index, int a) {\r
+       if (index < 0 || index >= EXTRA_SIZE)\r
+           throw new IllegalArgumentException();\r
+       header[EXTRA_INDEX + index] = a;\r
+   }\r
+}
\ No newline at end of file