Package de.desy.tine.endianUtils

Source Code of de.desy.tine.endianUtils.Swap

package de.desy.tine.endianUtils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import de.desy.tine.definitions.TErrorList;
import de.desy.tine.definitions.TFormat;
import de.desy.tine.exceptions.TineRuntimeErrorException;
import de.desy.tine.server.logger.MsgLog;

public final class Swap
{
  public static short Short(short sval)
  {
    int ival = sval;
    if (ival < 0) ival += 65536;
    int tmp = (ival << 8) | (ival >>> 8) & 0xffff;
    return (short) tmp;
  }
  public static short Short(int ival)
  {
    ival = ival & 0xffff;
    if (ival > 32767) ival -= 65536;
    int tmp = (ival << 8) | (ival >>> 8) & 0xffff;
    return (short) tmp;
  }
  public static short[] ShortArray(byte[] barr)
  {
    if (barr == null) return null;
    int len = barr.length;
    if ((len % 2) != 0) throw new TineRuntimeErrorException(TErrorList.dimension_error);
    short[] sa = new short[len/2];
    byte b1;
    for (int i=0; i<len; i += 2)
    {
      b1 = barr[i];
      barr[i] = barr[i+1];
      barr[i+1] = b1;
    }
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      len /= 2;
      for (int i=0; i<len; i++)
      {
        sa[i] = ds.readShort();
      }
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read int value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return sa;
  }
  public static int Long(int ival)
  {
    int tmp = ((ival >>> 24) | (ival << 24) | ((ival & 0xff00) << 8) | ((ival & 0x00ff0000) >>> 8));
    return tmp;
  }
  public static int Long(long lval)
  {
    if (lval > 2147483647) lval -= 4294967296L;
    long tmp = ((lval >>> 24) | (lval << 24) | ((lval & 0xff00) << 8) | ((lval & 0x00ff0000) >>> 8));
    tmp &= 0xffffffff;
    return (int)tmp;
  }
  public static int Long(byte[] barr)
  {
    byte b1, b2;
    int ival = 0;
    b1 = barr[0];
    b2 = barr[1];
    barr[0] = barr[3];
    barr[1] = barr[2];
    barr[2] = b2;
    barr[3] = b1;
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      ival = ds.readInt();
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read int value from stream",TErrorList.code_failure,e,0);
      return 0;
    }
    return ival;
  }
  public static int[] IntArray(byte[] barr)
  {
    if (barr == null) return null;
    int len = barr.length;
    if ((len % 4) != 0) throw new TineRuntimeErrorException(TErrorList.dimension_error);
    int[] ia = new int[len/4];
    byte b1, b2;
    for (int i=0; i<len; i += 4)
    {
      b1 = barr[i];
      b2 = barr[i+1];
      barr[i] = barr[i+3];
      barr[i+1] = barr[i+2];
      barr[i+2] = b2;
      barr[i+3] = b1;
    }
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      len /= 4;
      for (int i=0; i<len; i++)
      {
        ia[i] = ds.readInt();
      }
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read int value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return ia;
  }
  public static long DLong(byte[] barr)
  {
    long lv = 0;
    byte b1,b2,b3,b4;
   
    try
    {
      b1 = barr[0];
      b2 = barr[1];
      b3 = barr[2];
      b4 = barr[3];
      barr[0] = barr[7];
      barr[1] = barr[6];
      barr[2] = barr[5];
      barr[3] = barr[4];
      barr[4] = b4;
      barr[5] = b3;
      barr[6] = b2;
      barr[7] = b1;
     
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);               
      lv = ds.readLong();
      ds.close();
      bs.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
      MsgLog.log("Swap.DLong",e.getMessage(),TErrorList.code_failure,e,0);
    }
    return lv;   
  }
  public static long DLong(long lval)
  {
    byte[] lba = DLongToBytes(lval);  
    long lv = 0;
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(lba);
      DataInputStream ds = new DataInputStream(bs);
      lv = ds.readLong();
      ds.close();
      bs.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
      MsgLog.log("Swap.DLong",e.toString(),TErrorList.code_failure,e,0);
    }   
   return lv;   
  }
 
    public static byte[] DLongToBytes(long lval)
  {
    byte b1, b2, b3, b4, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(8);
      DataOutputStream ds = new DataOutputStream(bs);
      ds.writeLong(lval);
      barr = bs.toByteArray();
      b1 = barr[0];
      b2 = barr[1];
      b3 = barr[2];
      b4 = barr[3];
      barr[0] = barr[7];
      barr[1] = barr[6];
      barr[2] = barr[5];
      barr[3] = barr[4];
      barr[4] = b4;
      barr[5] = b3;
      barr[6] = b2;
      barr[7] = b1;
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read double value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
 
  public static byte[] LongToBytes(int ival)
  {
    byte b1, b2, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(4);
      DataOutputStream ds = new DataOutputStream(bs);
      ds.writeInt(ival);
      barr = bs.toByteArray();
      b1 = barr[0];
      b2 = barr[1];
      barr[0] = barr[3];
      barr[1] = barr[2];
      barr[2] = b2;
      barr[3] = b1;
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read int value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
  public static byte[] ShortToBytes(int ival)
  {
    ival = ival & 0xffff;
    if (ival > 32767) ival -= 65536;
    short sval = (short)ival;
    byte b1, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(2);
      DataOutputStream ds = new DataOutputStream(bs);
      ds.writeShort(sval);
      barr = bs.toByteArray();
      b1 = barr[0];
      barr[0] = barr[1];
      barr[1] = b1;
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read int value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
  public static byte[] Float(float fval)
  {
    byte b1, b2, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(4);
      DataOutputStream ds = new DataOutputStream(bs);
      ds.writeFloat(fval);
      barr = bs.toByteArray();
      b1 = barr[0];
      b2 = barr[1];
      barr[0] = barr[3];
      barr[1] = barr[2];
      barr[2] = b2;
      barr[3] = b1;
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read float value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
  public static byte[] FloatArray(float[] farr)
  {
    if (farr == null) return null;
    byte b1, b2, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(farr.length*4);
      DataOutputStream ds = new DataOutputStream(bs);
      for (int i=0; i<farr.length; i++) ds.writeFloat(farr[i]);
      barr = bs.toByteArray();
      for (int i=0; i<barr.length; i += 4)
      {
        b1 = barr[i];
        b2 = barr[i+1];
        barr[i] = barr[i+3];
        barr[i+1] = barr[i+2];
        barr[i+2] = b2;
        barr[i+3] = b1;
      }
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read float value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
  public static float[] FloatArray(byte[] barr)
  {
    if (barr == null) return null;
    int len = barr.length;
    if ((len % 4) != 0) throw new TineRuntimeErrorException(TErrorList.dimension_error);
    float[] fa = new float[len/4];
    byte b1, b2;
    for (int i=0; i<len; i += 4)
    {
      b1 = barr[i];
      b2 = barr[i+1];
      barr[i] = barr[i+3];
      barr[i+1] = barr[i+2];
      barr[i+2] = b2;
      barr[i+3] = b1;
    }
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      len /= 4;
      for (int i=0; i<len; i++)
      {
        fa[i] = ds.readFloat();
      }
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read float value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return fa;
  }
  public static float Float(byte[] barr)
  {
    byte b1, b2;
    int len = 4;
    for (int i = 0; i < len; i += 4)
    {
      b1 = barr[i];
      b2 = barr[i + 1];
      barr[i] = barr[i + 3];
      barr[i + 1] = barr[i + 2];
      barr[i + 2] = b2;
      barr[i + 3] = b1;
    }
    float fltval = 0;
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      fltval = ds.readFloat();
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read float value from stream",TErrorList.code_failure,e,0);
      return 0;
    }
    return fltval;
  }
  public static byte[] Double(double dval)
  {
    byte b1, b2, b3, b4, barr[];
    try
    {
      ByteArrayOutputStream bs = new ByteArrayOutputStream(8);
      DataOutputStream ds = new DataOutputStream(bs);
      ds.writeDouble(dval);
      barr = bs.toByteArray();
      b1 = barr[0];
      b2 = barr[1];
      b3 = barr[2];
      b4 = barr[3];
      barr[0] = barr[7];
      barr[1] = barr[6];
      barr[2] = barr[5];
      barr[3] = barr[4];
      barr[4] = b4;
      barr[5] = b3;
      barr[6] = b2;
      barr[7] = b1;
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read double value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return barr;
  }
  public static double Double(byte[] barr)
  {
    byte b1, b2, b3, b4;
    int len = 8;
    for (int i = 0; i < len; i += 8)
    {
      b1 = barr[i];
      b2 = barr[i + 1];
      b3 = barr[i + 2];
      b4 = barr[i + 3];
      barr[i] = barr[i + 7];
      barr[i + 1] = barr[i + 6];
      barr[i + 2] = barr[i + 5];
      barr[i + 3] = barr[i + 4];
      barr[i + 4] = b4;
      barr[i + 5] = b3;
      barr[i + 6] = b2;
      barr[i + 7] = b1;
    }
    double dblval = 0;
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      dblval = ds.readDouble();
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read double value from stream",TErrorList.code_failure,e,0);
      return 0;
    }
    return dblval;
  }
  public static double[] DoubleArray(byte[] barr)
  {
    if (barr == null) return null;
    int len = barr.length;
    if ((len % 8) != 0) throw new TineRuntimeErrorException(TErrorList.dimension_error);
    double[] da = new double[len/8];
    byte b1, b2, b3, b4;
    for (int i=0; i<len; i += 8)
    {
      b1 = barr[i];
      b2 = barr[i+1];
      barr[i] = barr[i+3];
      barr[i+1] = barr[i+2];
      barr[i+2] = b2;
      barr[i+3] = b1;
      b1 = barr[i];
      b2 = barr[i+1];
      b3 = barr[i+2];
      b4 = barr[i+3];
      barr[i] = barr[i+7];
      barr[i+1] = barr[i+6];
      barr[i+2] = barr[i+5];
      barr[i+3] = barr[i+4];
      barr[i+4] = b4;
      barr[i+5] = b3;
      barr[i+6] = b2;
      barr[i+7] = b1;
    }
    try
    {
      ByteArrayInputStream bs = new ByteArrayInputStream(barr);
      DataInputStream ds = new DataInputStream(bs);
      len /= 8;
      for (int i=0; i<len; i++)
      {
        da[i] = ds.readDouble();
      }
      ds.close();
      bs.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
      MsgLog.log("Swap","could not read float value from stream",TErrorList.code_failure,e,0);
      return null;
    }
    return da;
  }
  public static void Bytes(byte[] barr, int bounds)
  {
    if (bounds <= 0) return;
    if ((barr.length % bounds) != 0) return;
    int len = barr.length;
    byte b1, b2, b3, b4;
    switch (bounds)
    {
      default:
      case 1:
        return;
      case 2:
        for (int i = 0; i < len; i += 2)
        {
          b1 = barr[i];
          barr[i] = barr[i + 1];
          barr[i + 1] = b1;
        }
        return;
      case 4:
        for (int i = 0; i < len; i += 4)
        {
          b1 = barr[i];
          b2 = barr[i + 1];
          barr[i] = barr[i + 3];
          barr[i + 1] = barr[i + 2];
          barr[i + 2] = b2;
          barr[i + 3] = b1;
        }
        return;
      case 8:
        for (int i = 0; i < len; i += 8)
        {
          b1 = barr[i];
          b2 = barr[i + 1];
          b3 = barr[i + 2];
          b4 = barr[i + 3];
          barr[i] = barr[i + 7];
          barr[i + 1] = barr[i + 6];
          barr[i + 2] = barr[i + 5];
          barr[i + 3] = barr[i + 4];
          barr[i + 4] = b4;
          barr[i + 5] = b3;
          barr[i + 6] = b2;
          barr[i + 7] = b1;
        }
        return;
    }
  }
  public static void Bytes(byte[] barr, short fmt)
  {
    int len;
    byte b1, b2;
    switch (fmt)
    {
      default:
      case TFormat.CF_BYTE:
        break;
      case TFormat.CF_DLONG: 
      case TFormat.CF_DBLDBL:
      case TFormat.CF_DBLTIME:
      case TFormat.CF_DOUBLE:
        Bytes(barr, 8);
        break;
      case TFormat.CF_SHORT:
        Bytes(barr, 2);
        break;
      case TFormat.CF_LONG:
        Bytes(barr, 4);
        break;
      case TFormat.CF_FLOAT:
        Bytes(barr, 4);
        break;
      case TFormat.CF_SPECTRUM:
        if (barr.length < 96) return;
        len = barr.length;
        for (int i = 20; i < len; i += 4)
        {
          b1 = barr[i];
          b2 = barr[i + 1];
          barr[i] = barr[i + 3];
          barr[i + 1] = barr[i + 2];
          barr[i + 2] = b2;
          barr[i + 3] = b1;
        }
        break;
      case TFormat.CF_USTRING:
        if ((barr.length % 96) != 0) return;
        len = barr.length;
        for (int i = 0; i < len; i += 96)
        {
          b1 = barr[i];
          b2 = barr[i + 1];
          barr[i] = barr[i + 3];
          barr[i + 1] = barr[i + 2];
          barr[i + 2] = b2;
          barr[i + 3] = b1;
          b1 = barr[i + 4];
          b2 = barr[i + 5];
          barr[i + 4] = barr[i + 7];
          barr[i + 5] = barr[i + 6];
          barr[i + 6] = b2;
          barr[i + 7] = b1;
          b1 = barr[i + 8];
          b2 = barr[i + 9];
          barr[i + 8] = barr[i + 11];
          barr[i + 9] = barr[i + 10];
          barr[i + 10] = b2;
          barr[i + 11] = b1;
          b1 = barr[i + 12];
          b2 = barr[i + 13];
          barr[i + 12] = barr[i + 15];
          barr[i + 13] = barr[i + 14];
          barr[i + 14] = b2;
          barr[i + 15] = b1;
        }
        break;
      case TFormat.CF_NAME16FI:
        if ((barr.length % 24) != 0) return;
        len = barr.length;
        for (int i = 0; i < len; i += 24)
        {
          b1 = barr[i + 16];
          b2 = barr[i + 17];
          barr[i + 16] = barr[i + 19];
          barr[i + 17] = barr[i + 18];
          barr[i + 18] = b2;
          barr[i + 19] = b1;
          b1 = barr[i + 20];
          b2 = barr[i + 21];
          barr[i + 20] = barr[i + 23];
          barr[i + 21] = barr[i + 22];
          barr[i + 22] = b2;
          barr[i + 23] = b1;
        }
        break;
      case TFormat.CF_FLTINT:
        Bytes(barr, 4);
        break;
      case TFormat.CF_INTINT:
        Bytes(barr, 4);
        break;
      case TFormat.CF_FLTFLTINT:
        Bytes(barr, 4);
        break;
      case TFormat.CF_INTFLTINT:
        Bytes(barr, 4);
        break;
      case TFormat.CF_INTFLTFLTFLT:
        Bytes(barr, 4);
        break;
    }
    return;
  }
  /* */
  public static void Bytes(byte[] barr, String tag)
  {
    int bounds;
    byte b1, b2, b3, b4;
    if (tag.compareTo("AESNOT") == 0)
    {
      bounds = 4 * 4 + 4 * 64; // size of AESnotify structure
      if (barr.length % bounds != 0) return;
      for (int i = 0; i < barr.length; i += bounds)
      {
        // 4 UINT32 values ...
        for (int j = 0; j < 16; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 256 8-bit characters (no swapping)
      }
      return;
    }
    if (tag.compareTo("AESCON") == 0)
    {
      bounds = 4 * 4 + 16; // size of AEScontext structure
      if (barr.length % bounds != 0) return;
      for (int i = 0; i < barr.length; i += bounds)
      {
        // 4 UINT32 values ...
        for (int j = 0; j < 16; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 16 8-bit characters (no swapping)
      }
      return;
    }
    if (tag.compareTo("AES") == 0)
    {
      bounds = 2 * 4 + 4 * 64 + 32; // size of AES structure
      if (barr.length % bounds != 0) return;
      for (int i = 0; i < barr.length; i += bounds)
      {
        // 2 UINT32 values ...
        for (int j = 0; j < 8; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 256 8-bit characters (no swapping)
        // 32 bytes (no swapping)
      }
      return;
    }
    if (tag.compareTo("AIB") == 0)
    {
      bounds = 2 * 2 + 4 + 64; // size of Archive Info Block
      if (barr.length % bounds != 0) return;
      for (int i = 0, j = 0; i < barr.length; i += bounds)
      {
        // 2 UINT16 values ...
        for (j = 0; j < 4; j += 2)
        {
          b1 = barr[i + j];
          barr[i + j] = barr[i + j + 1];
          barr[i + j + 1] = b1;
        }
        // 1 UINT32 value ...
        for (int offset = j; j < 4 + offset; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 64 8-bit characters (no swapping)
      }
      return;
    }
    if (tag.compareTo("PIB") == 0)
    {
      bounds = 5 * 4 + 16 + 2 * 8 + 2 * 2; // size of Property Info Block
      if (barr.length % bounds != 0) return;
      for (int i = 0, j = 0; i < barr.length; i += bounds)
      {
        // 5 UINT32 or float values ...
        for (j = 0; j < 20; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 16 8-bit characters (no swapping)
        // 2 double values ...
        for (int offset = j + 16; j < 16 + offset; j += 8)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          b3 = barr[i + j + 2];
          b4 = barr[i + j + 3];
          barr[i + j] = barr[i + j + 7];
          barr[i + j + 1] = barr[i + j + 6];
          barr[i + j + 2] = barr[i + j + 5];
          barr[i + j + 3] = barr[i + j + 4];
          barr[i + j + 4] = b4;
          barr[i + j + 5] = b3;
          barr[i + j + 6] = b2;
          barr[i + j + 7] = b1;
        }
        // 2 UINT16 values ...
        for (int offset = j; j < 4 + offset; j += 2)
        {
          b1 = barr[i + j];
          barr[i + j] = barr[i + j + 1];
          barr[i + j + 1] = b1;
        }
      }
      return;
    }
    if (tag.compareTo("DHS") == 0)
    { // size of Data Header Structure
      bounds = 32 + 4 + 2 * 2 + 4 + 4 * 4 + 16 + 4 * 2 + 4 + 4 * 64;
      if (barr.length % bounds != 0) return;
      for (int i = 0, j = 0; i < barr.length; i += bounds)
      { // 32 8-bit characters (no swapping)
        // 1 UINT32 or float values ...
        for (int offset = 32; j < 4 + offset; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 2 UINT16 values ...
        for (int offset = j; j < 4 + offset; j += 2)
        {
          b1 = barr[i + j];
          barr[i + j] = barr[i + j + 1];
          barr[i + j + 1] = b1;
        }
        // 5 UINT32 or float values ...
        for (int offset = j; j < 20 + offset; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 16 8-bit characters (no swapping)
        // 2 UINT32 or float values ...
        for (int offset = j + 16; j < 8 + offset; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 4 + 256 8-bit characters (no swapping)
      }
      return;
    }
    if (tag.compareTo("ADRB") == 0)
    {
      bounds = 3 * 4 + 3 * 16 + 2 * 2; // size of Archive Data Request Block
      if (barr.length % bounds != 0) return;
      for (int i = 0, j = 0; i < barr.length; i += bounds)
      {
        // 3 UINT32 values ...
        for (int offset = j; j < 12 + offset; j += 4)
        {
          b1 = barr[i + j];
          b2 = barr[i + j + 1];
          barr[i + j] = barr[i + j + 3];
          barr[i + j + 1] = barr[i + j + 2];
          barr[i + j + 2] = b2;
          barr[i + j + 3] = b1;
        }
        // 48 8-bit characters (no swapping)
        // 2 UINT16 values ...
        for (int offset = j + 48; j < 4 + offset; j += 2)
        {
          b1 = barr[i + j];
          barr[i + j] = barr[i + j + 1];
          barr[i + j + 1] = b1;
        }
      }
      return;
    }
    return;
  }
  /* */
  /* */
}
TOP

Related Classes of de.desy.tine.endianUtils.Swap

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.