-package org.simantics.acorn.internal;
-
-import org.simantics.acorn.exception.IllegalAcornStateException;
-import org.simantics.db.service.Bytes;
-import org.simantics.db.service.ClusterUID;
-
-public abstract class ClusterUpdateProcessorBase2 {
-
- final private byte[] bytes;
- private int pos = 0;
- final private int len;
- final private ClusterUID uid;
-
- public ClusterUpdateProcessorBase2(byte[] operations) {
- this.bytes = operations;
- this.len = Bytes.readLE4(bytes, 0) + 4; // whatta?
- int version = Bytes.readLE4(bytes, 4);
- assert(version == ClusterChange2.VERSION);
- long cuid1 = Bytes.readLE8(bytes, 8);
- long cuid2 = Bytes.readLE8(bytes, 16);
- pos = 24;
- uid = ClusterUID.make(cuid1, cuid2);
- }
-
- public ClusterUID getClusterUID() {
- return uid;
- }
-
- private void processSetImmutable(int op) {
- int value = bytes[pos++]&0xff;
- setImmutable(value > 0);
- }
-
- private void processUndoValue(int op) {
- Bytes.readLE4(bytes, pos);
- pos+=4;
- }
-
- public void process() throws IllegalAcornStateException {
-
- while(pos < len) {
-
- int op = bytes[pos++]&0xff;
-
- switch(op) {
-
- case ClusterChange2.SET_IMMUTABLE_OPERATION:
- processSetImmutable(op);
- break;
- case ClusterChange2.UNDO_VALUE_OPERATION:
- processUndoValue(op);
- break;
- default:
- throw new IllegalAcornStateException("Can not process cluster " + uid);
-
- }
- }
- }
-
- abstract void setImmutable(boolean value);
-
-}