All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rcsb.cif.binary.encoding.DeltaEncoding Maven / Gradle / Ivy

package org.rcsb.cif.binary.encoding;

import org.rcsb.cif.binary.data.IntArray;
import org.rcsb.cif.binary.data.SignedIntArray;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 

Stores the input integer array as an array of consecutive differences.

* *
 * Delta {
 *     kind = "Delta"
 *     origin: number
 *     srcType: int[]
 * }
 * 
*/ public class DeltaEncoding> implements Encoding { private int origin; private int srcType; public DeltaEncoding() { } public DeltaEncoding(int origin, int srcType) { this.origin = origin; this.srcType = srcType; } @Override public Map getMapRepresentation() { Map map = new LinkedHashMap<>(); map.put("kind", "Delta"); map.put("origin", origin); map.put("srcType", srcType); return map; } @Override @SuppressWarnings("unchecked") public T decode(T data) { int[] input = data.getData(); T output = (T) IntArray.create(data.getType(), input.length); output.setEncoding(data.getEncoding()); int n = input.length; if (n == 0) { return output; } int[] outputArray = output.getData(); outputArray[0] = input[0] + origin; for (int i = 1; i < n; ++i) { outputArray[i] = input[i] + outputArray[i - 1]; } return output; } @Override @SuppressWarnings("unchecked") public T encode(T data) { int srcType = data.getType(); int[] inputArray = data.getData(); if (inputArray.length == 0) { T output = (T) IntArray.create(srcType, 0); return create(data, srcType, output, 0); } T output = (T) IntArray.create(srcType, inputArray.length); int[] outputArray = output.getData(); int origin = inputArray[0]; outputArray[0] = inputArray[0]; for (int i = 1; i < inputArray.length; i++) { outputArray[i] = inputArray[i] - inputArray[i - 1]; } outputArray[0] = 0; return create(data, srcType, output, origin); } private T create(T data, int srcType, T output, int origin) { Deque> enc = new ArrayDeque<>(data.getEncoding()); this.origin = origin; this.srcType = srcType; enc.add(this); output.setEncoding(enc); return output; } @Override public String toString() { return "DeltaEncoding{" + "origin=" + origin + ", srcType=" + srcType + '}'; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy